The process of separation variables does not restrict you to separable solutions. All is does it give you a complete set (i.e. a basis) of solutions from which you can build up the most general solution. For example, suppose you have ##\phi_1, \phi_2## as solutions to the time independent Schrodinger equation with energies ##E_1, E_2##, respectively. Then the wavefunction ##\psi(x,t) = \frac{1}{\sqrt{2}}(\phi_1(x) e^{-iE_1t/\hbar} + \phi_2(x) e^{-iE_2t/\hbar})## is a solution to the full time dependent Schrodinger equation, but is not separable. Because we have a complete set of solutions, any solution to the time dependent equation can be written as a sum of energy eigenstates times the appropriate time evolution factor.
The reason we do the separation of variables procedure is that the eigenstates of the Hamiltonian are a very convenient basis in which to express your general solution. The reason is that the time evolution operator is ##e^{-iHt/\hbar}##. This looks simple, but computing the exponential of an operator like the Hamiltonian is, in general, extremely complicated—in fact, in a poorly chosen basis the problem is intractable. However, if we can find a set of stationary states by solving the time independent equation then getting the general time dependent solution is trivial. If our general solution is written as ##\psi(x) = \sum_i c_i \phi_i(x)## where each ##\phi_i## is a solution to the time independent equation with energy ##E_i##, then the time evolved solution is ##\psi(x,t) = e^{-iHt/\hbar}\psi(x) = \sum_i c_i\phi_i(x) e^{-iE_it/\hbar}##. That is, the time evolution operator applied to each term just becomes a complex phase with a period determined by the state's energy.
So, the process of separation of variables is completely general and allows us to construct non-separable solutions too as a superposition of the separable solutions. You could do it a different way, but it'd be a daft to do so if you didn't need to since you'd be trading away an exact solution for an inexact one. It is something we do, but generally only if the time independent Schrodinger equation's solutions are intractable, or if we have a time-dependent Hamiltonian (in which case we can't use the formal expression above for the time evolution operator). This is done generally when interactions are considered (like in quantum field theory) and the Hamiltonian doesn't have analytic eigenfunctions, so instead you express your solution as a perturbation series.