First start with a related task: enumerate all (finite) sequences of natural numbers. We will devide those sequences into a sequence of finite sets, and then we can enumerate all sequences by taking the sets one after another and enumerating the items in those sets.
Note that we cannot enumerate first all sequence of length one, then of length two, etcetera. Each of those sequences is infinite and does not end. So we have to weave the infinite sequences of infinite length into one single sequence. The process is called dovetailing.
For every sequence of numbers $(n_1, n_2, \dots, n_k)$ let the complexity of the sequence be the maximum of the length of the sequence and the numbers involved: $\max \{k, n_1, n_2, \dots, n_k\}$. Now each sequence has a complexity, and we can enumerate the sequences by increasing complexity. Starting with the empty sequence, sequences of one integer that can only be $0$ or $1$, etcetera.
The task of enumerating $L^+$ is simular.
If the language $L$ is enumerable, then there is a procedure that lists its elements, $x_0, x_1,x_2,x_3, \dots$. In that way we assign a number to each word. Then sequences of numbers map to sequences in $L^+$, and we can enumerate in that way. Thus $(5,2,2,0)$ maps to $x_5\cdot x_2\cdot x_2\cdot x_0$.
Note that we will possibly find some strings in $L^+$ several times, as the decomposition might not be unique (eg., $ab \cdot a = a \cdot ba$). For enumeration that is ok, but you can drop duplicates if you want.