Daniel,
1.) You can use complex valued algebra if you split your problem into two equations. Apart from that most of the algebra objects can be used with std::complex<double>.
2.) Using SLEPc it should be able to compute eigenvalues for a complex valued system
3.) As already mentioned at the moment you can't use std::complex in a ConstraintMatrix. If however, you are able to formulate your problem as a system of real valued problems
you can use whatever (linear) boundary condition you want. You can use make_periodicity_constraints to setup the DoFs you want to constraint and modify the inhomogeneity afterwards suitably.
4.) If you can formulate your problem as PDE (in not more than 3D) you can likely use deal.II for solving it numerically.
Best,
Daniel