I like the proof by Paul Monsky: 'Simplifying the Proof of Dirichlet's Theorem' American Mathematical Monthly, Vol. 100 (1993), pp. 861-862.
Naturally this does maintain the distinction between real and complex as whatever you do, the complex case always seems to be easier as one would have two vanishing L-functions for the price of one.
I incorporated this argument into my note on a "real-variable" proof of Dirichlet's theorem at http://secamlocal.ex.ac.uk/people/staff/rjchapma/etc/dirichlet.pdf .
There are proofs, notably in Serre's Course in Arithmetic which claim to treat the real and complex case on the same footing. But this is an illusion; it pretends the complex case is as hard as the real case. Serre considers the product $\zeta_m(s)=\prod L(s,\chi)$ where $\chi$ ranges over the modulo $m$ Dirichlet characters. If one of the $L(1,\chi)$ vanishes then $\zeta_m(s)$ is bounded as $s\to 1$ and Serre obtains a contradiction by using Landau's theorem on the abscissa of convergence of a positive Dirichlet series. But all this subtlety is only needed for the case of real $\chi$. In the non-real case, at least two of the $L(1,\chi)$ vanish so that $\zeta_m(s)\to0$ as $s\to1$. But it's elementary that $\zeta_m(s)>1$ for real $s>0$ and the contradiction is immediate, without the need of Landau's subtle result.