Consider the Unreal network architecture: https://docs.unrealengine.com/udk/Three/NetworkingOverview.h...
When Tim Sweeney needed to make an engine, he didn't simply hardcode each of the tasks: Update position, update velocity, play animation...
Instead, he created a system that allowed those things to become implicit. They synchronize themselves across the network by default. There's no special logic required.
So when I look at SPAs, I see a similar sort of situation. Rather than hardcoding each of our endpoints, why don't we come up with a system where we can synchronize some variables from the server to the client? Then adding some new data is as simple as declaring a new variable. No need to create an endpoint for every single thing.
This is vague and handwavey, but there's an underlying idea here worth examining. It seems like we could leverage abstraction in a way that unifies these systems (as opposed to simply shoveling another layer of abstraction on top of the current pile).
Has anyone been working on anything like this?