Turing Recognisable => enumerable
What's missing is the way you run the Turing Machine $M$ on strings to get the Enumerator. Rather than generate each string, run $M$, and then output this string if the $M$ accepts – which as you identified will not work – you do something like the following, which
adopts the
 strategy of simulating many instances of the $M$ on different strings "in parallel". 

Assume the tape has contents 
$\langle w_1,  S_1\rangle \# \cdots \# \langle w_n, S_n\rangle$,
where $w_i$ is some word under consideration and $S_i$ is the current state of $M$
operating on $w_i$. This represents that $n$ copies of $M$ are being simulated. $w_i$ is stored so we know what the original input was.

Now run the following loop


At the end the tape write the next string from $w\in\Sigma^*$, along with the
initial configuration $S$ of $M$, that is, write $\# \langle w, S\rangle$.
Simulate each copy of the $M$ on the tape for one step. (Presumably use another tape.)
If any of the $M$s enters an accepting state, put the corresponding string onto the output tape. Remove this instance of $M$ from the tape.
If any of the $M$s enters a rejecting state, remove that instance of $M$ from the tape.
Goto step 1.


It is not hard to argue that all strings $w\in\Sigma^*$ accepted by $M$ will eventually be output on the tape.