Thinking a bit more about the subject of "local un-open" I think I may not even mind a recursive variant, but with slightly different syntax, and the following interpreation: A "local un-open" undo the effect of local open, that is, no symbols from the opened module are visible. Than those can be nested with the with the obvious interpretation

So with '+' defined in M, N and at the top level and ~(... ) being "local un-open" and a expression like the one below:

   M.( .... N.( .. + .. ~( .. + ... ~(.. + ..) .. ))

first  '+' would be N.+ the second one M.+ and the last the top level one.

Too clumsy I guess.. Well it was fun. And I will throw in just one more possibility: explicit unopeninng of modules.

~M.(... ) - which may make sense for unshadowing symbols from Pervasives.