Another couple ideas you might get some traction on are making
typeid() values be convertible back into typeof types iff CTFE.
That would let you use types as OOP class values in intermediate
structures while still turning them back into template args later.
Not sure just how realistic that is, but might be fun to explore.
Related would be to use RTInfo in druntime to extend the typeid
info to runtime data, based on a -version switch. This should be
possible in today's language fairly easily, though it would not
be customizable by the end user, you could perhaps just make it
include it all.