At the moment this is the expected behaviour. What happens under the hood is that the hidden parts of the expression get wrapped in a \ldots{ }
construction, and all algorithms simply step over these. You can see this by calling print(tree(ex))
on which you have done one or more zoom operations.
As these \ldots{ }
nodes of the expression tree do not contain any information about when they were generated, all that unzoom
can do is to unwrap them all. What would make sense is to make zoom
automatically add another \ldots{ }
around each existing one. Good suggestion, I'll see what I can do for 2.2.8 (we're heading for another Easter Bunny release soon).