Thanks Dimitry the URL swap is a possible solution, but we don't think it's ideal for the client.
Juraj re: discrepancy between live and admin you're correct. We've been able to overwrite widget data now on a parent page from a child page for both the published and latest versions.
As this seems to be non-standard activity, can we be sure that it won't have any unexpected impacts if we are just updating this widget data in the thread of a controller action?
For the benefit of anyone trying to do the same thing, there are two different actions required to update widget data on the published and latest version.
To update the published version, as mentioned above you can use an IDocumentCultureDataInfoProvider to get the parent's DocumentCultureDataInfo, update its DocumentPageBuilderWidgets property, and then set the modified entity.
To update the latest version you can retrieve the latest VersionHistoryInfo from the parent page's VersionHistory property, then modify its NodeXML inner text, and set the modified entity with an IVersionHistoryInfoProvider. Specifically it's the XML element named DocumentPageBuilderWidgets that needs to be updated.