Forgot to reply to this bit. So, we could make DEFCTYPE behave like DEFCTYPE*, i.e. defer the type instantiation until parse-time. IIRC, the only disadvantage is that you don't get an immediate error on (defctype foo some-typo-here).
I think defctype's semantics are reasonable as-is. However, in retrospect, I also think it's handy to have something out of box (like defctype*) that more closely mimics the semantics of C's typedef. So the status quo seems fine to me :)
Sincerely, Rayiner Hashem