The analysis is correct. Information about container size is not updated until the object is rendered.
Approximately speaking, for efficiency you cannot recalculate all downstream properties each time you make a change, as you might not even have consistent properties, especially if you are using assignment syntax to update properties as semantically that only permits updating one property at a time (whereas set() could potentially represent a batch.)
Thus you need a semantics to say "Begin a batch. Record this list of updates to be made, but do not put it all in effect yet as you do not have a consistent view yet. Ok, end the batch and make all those changes at once (or in a hierarchical order)".
MATLAB did not choose to define an explicit "begin" operation. Instead it just defined the "end" operation, and that defined "end" operation is rendering to the screen. Automatically calculated positions and sizes of objects are not calculated until rendering, under the hypothesis that you might be in the middle of making a batch of changes.
You are correct that this does mean that in cases where you need to know how big something is that was automatically sized (or size changed due to user actions), that you have to render it, and that risks it becoming visible to the viewer in the time before you can make it invisible again.
This used to be a continual challenge when you needed to know the screen real-estate needed for some block of text in a proportionately spaced font especially if the user had control of font size or family. You might need that information to figure out the optimal placement of objects, creating boxes just large enough to hold a heading, (e.g. not wasting space now against the possibility that some day in the future someone might want a 30 point font for some reason.) A small number of releases ago a feature was added for this specific purpose of asking about required text size; I have not used it yet to have memorized the function name for that.
You are right, it is a problem, and it is a general problem... but there are also reasons why updates are not done immediately.
MATLAB could add some kind of "release" operator that triggered the updates without having to make them visible, but it has not done so.