I'm curious, when you change the schema on the fly, the app code has to deal with both versions, right? I'm afraid this means you shift the pain instead of blowing it away.
Distributed system development is a zero sum game. That is the dirty little secret/feature of NoSQL. It is great if the shifted work can be partially addressed; simply addressed; or entirely ignored (for your domain). But if you find yourself reinventing an RDBMS, it is time to re-evaluate your choices.
(I'm a NoSQL OSS developer/contributor and enthusiast.)
I have some hacks for making migrations literally painless I'll share soon. It takes some tinkering to figure things out but that's why it's exciting, because the solutions are actually better.