Personally, I like the extra meshes and scripts that make IWR work so beautifully. (Though the performance drop is a little annoying.) The only thing that ruins it for me is incompatibility with other city mods, namely Better Cities. Because everything has to be manually placed, it doesn't work if any of the buildings have been moved or altered.
How powerful is OBSE? Would it be possible to, say, run a check through all the static meshes in the area that fall under the "Architecture" file path and then compare them against a list of models? Would it be possible then to, say, check the name of attached doors, or some similar check? Then, would it be possible to place and remove meshes in the world without savegame bloat?
If so, you could set up a dynamic version of IWR. (Without the lights. Or lights toggleable.) On entry to every city, it would find all the buildings and read window locations recorded to ini files.
(Using Pluggy. That would mean someone would have to go into the CS, place the building at 0,0,0 and place IWR meshes on all the windows, then record their locations for the script to use.) After every building is found, it checks to see what cells the doors lead to, and then reads time settings set in an ini file. (Olav's Tap and Tack, 6pm to 7am) It then remembers these buildings and their accompanying lights in an array, and every hour of in game time, or something like that, it runs a script to check buildings against their light on and off times. If they need to turn on, it places meshes relative to the building based on the recorded window positions in the ini files. (This might require a little trigonometry to work on rotated buildings, and scaling should be considered too.) Probably it would be best to remember these locations in the savegame, but provide a function in the ESP that can be run in interior cells to clean out all the meshes and recorded locations from the game before removing the mod.
Well, if you didn't already have enough on your hands, I'm sure that'll take care of that quite well.

Then again, that's only assuming OBSE can check static models like that, and even then I don't know if it's worth doing unless you've got plenty of time on your hands.