What about using an iframe and refreshing it with links targeting it ? Use <link rel="preload" ...> to make it really fast. Do so for any subcomponent of your page that can be updated independently of the rest of the page. Use browser caching for code assets/dependencies.
Pros: cheap & fast (?)
Cons: obviously the logical structure of your app must (somehow) follow the structure of nested iframes in the page.