There can be exponentially many such subgraphs, so any such algorithm will necessarily be slow.
To enumerate all of them, choose any number $i$ in the range $[1,k]$, choose any subset $S$ of $i$ of the vertices, discard all edges that have an endpoint not in $S$, choose any subset of the remaining edges, then check if the graph with vertex set $S$ and the chosen edge subset is connected; if not, discard the graph; if yes, output the subgraph. If you implement each "choose" with an for-loop that enumerates over all possibilities, this will enumerate over all graphs. There are standard ways to enumerate all subsets of a set.
You can make it a bit more efficient by choosing the edges in a particular order:
- for each $i \in [1,k]$:
- for each subset $S$ of exactly $i$ of the vertices: (*)
- let $E_1 = \{(u,v) \in E : u \in S, v \in S\}$ and $T := \emptyset$.
- for each $v \in S$:
- let $E_2 = \{(u,v) \in E : u \in S\}$.
- if $E_2$ is empty and $T$ has no edge incident on $V$, go to the next iteration of the loop marked (*).
- if $E_2$ is non-empty:
- choose a non-empty subset $E_3$ of $E_2$.
- set $T := T \cup E_3$ and $E_1 := E_1 \setminus E_2$.
- if the graph $(S,T)$ with vertex set $S$ and edge set $T$ is connected, output it
I don't know how to guarantee polynomial delay, but this might be fine for your particular application.