UFL has no support for complex numbers, so you can do it, as you say, by writing separate equations for the real and imaginary parts. It is also possible to use a VectorFunctionSpace
by carefully writing the equations for each component.
In the future, complex numbers may be supported, but it requires a significant change to the entire codebase.