The client.screen property imposes the first direct problem, I think. Developers would want to add things to a player's screen, without affecting every map. Whatever new method is introduced needs to be backwards-compatible. My idea is to assign each map control a screen property, that you can do something like the following for:
var/list/s = params2list(winget(client, mapCtrl, "screen"))
s.Add(O)
winset(client, mapCtrl, "screen=\"[list2params(s)]\"")
...or something to that effect. Then if we continue the interface's system of "default" values, like with input controls and such, we can use client.screen to refer directly to the default map control's screen list. So, then, client.screen += O would be roughly equivalent to the above code. Alternatively, here, each map would have a screen value, as would each client, and changing a client's screen property would indirectly update the map's value. This, I think, would work best in situations where the value of client.screen needs to be maintained without a map.
I think the same method of conversion would work well for client.eye/client.virtual_eye, with transferring the values to the map control, and using the client properties as values for the default map control. client.statobj would then be reworked into the actual info controls; the control would keep an object reference, and update its verbs and statpanels based on the object reference it contains.
I imagine I'm proposing a fair deal of tinkering, if this proposition is even doable, but I think that multiple maps would have a great deal of uses, especially in cases where multiple windows are desired to display different graphical information. As well, if you think of the Nintendo DS, placing two maps side-by-side would be a great way to handle the separation of, say, the character's world and a map, or other such information.
Hiead