If the efficiency of computing the layout is a concern, I cannot offer a workaround unfortunately.
However, if you are concerned only with preserving the placement of objects on the page, you could have the button and a spacer share the same real-estate by making their visible properties the negation of one another. (I have used similar logic to achieve dynamic layouts in prior bokeh apps and the time involved in re-layout was generally acceptable for my cases.)
I had issues with complex layouts with many plots a few years ago in scenarios where I did not expect redraw operations to occur.
See my following discourse topic and the solution I implemented to workaround it as the last post in the thread. No guarantee it will address your particular use-case, but it is at least passingly relevant.