I have mostly solved the issue by creating a hidden div below the editor that carries over the css (for margins etc), using that to calculate the height of nodes with their current contents. Not going to detal my code, but with those updated heights I can determine where to stick in the page break decoration widgets as well as the extra margins needed to keep them stable and not bouncing up and down.
The key to this working is that the plugin is called before anything is being done to update the DOM, so I can get it all right so that it looks like a Word-like page.