Well, it is the end of another night for me. I've managed to patch in a workaround for the LoopyNES bug (thanks to Loopy for his suggestion), and am also now bankswitching to load new levels data between worlds, successful proof-of-concept of being able to hijack the game engine mid-game and swap in new data. Yay! Works perfectly on all of my Big 4 (NesTen, LoopyNes, FCE Ultra, Nesticle). Dev cart, dev cart, here I come! :)
I am currently defining how new worlds are going to be stored and accessed in the ROM banks. (Right now, I've just got an 8K blob per world, which is really wasteful, considering that the entire original game's level data was a paltry 5K!) The RAM format will remain pretty much as is.(except with any tables expanded to their maximum lengths). In the ROM, though, I think the objects (worlds, maps, sprites) will need to indexed somehow with so many to choose from. I think I have an extensible format for this that might even be reusable on similar projects.
Anyway, good night all, and I'll update again soon.