Simple Client Router
It's fairly easy to write a custom client-side router. This site uses one; it looks something like
You can also do things like support history navigation and use the (experimental) View Transitions API for smooth transitions.
If the experimental Navigation API is ever released, it could make this even easier, since it consolidates all navigation events under one API.