Thanks for chiming in Matt — actually part of the reason I wrote this entry was in hopes that you’d offer your insight about it. I think that with a combination of the strategies you mention as well as just a tiny bit of metaprogramming that only lets you assign to a predefined list of keys, I can get enough of what I need that I’ll be satisfied that the compiler can grow but stay understandable. Or maybe I’m just telling myself that because I have no other real choice at this point.
A statically-typed language that lets you load run code on the fly as easily as today’s scripting languages seems totally possible, especially now that LLVM is getting so good. I think there’d be a market for this, especially if it was paired with a dynamic language that worked together with it (a la Java and Groovy, but without the enormous and high-overhead virtual machine).