In my mind, there is one big functional improvement for relays to ensure a truly decentralized system
Essentially, every client should also be a relay, but it only connects to a handful of other client/relays (perhaps the closest geographically, but this can be part of an algorithm).
The key is that each cluster of connections must not be isolated from other clusters. So, say you connect to 10 peers. Those peers must have one or more of their own peers be from outside of your set of peers.
Events must also broadcast to all peers. Since each cluster is not isolated from other clusters, each broadcast would eventually propagate the entire network.
Within these constraints, there can be a number of optimization techniques, such as when connecting to a set of peers, only download the last, say, 24 hour's worth of notes unless more is requested (such as while scrolling through one's feed). Notes themselves typically aren't that big, so getting up to speed would likely be fairly easy.
Granted, the trade-off is that your posts don't immediately make it to everyone, but that's just the trade-off. Such a network, which is clearly similar to the Bitcoin network, would certainly be resistant to shutdown. Frankly, the fact that you have to know particular relays in order for you to communicate with the broader network is a big problem. People don't want to deal with that. That stuff needs to be extracted away unless you know what you're doing.
nostr:nevent1qqsxvrrvyzq8dllhrunky3tsqyvfxpvr9lw2653jwtclapqfy3uws4cprpmhxue69uhkummnw3ezuendwsh8w6t69e3xj730qgsyvrp9u6p0mfur9dfdru3d853tx9mdjuhkphxuxgfwmryja7zsvhqrqsqqqqqp03af9g
Another problem is data size, same problem as Bitcoin nodes.
We are all learning together.
This can be alleviated to some degree by the fact that not everyone needs the entire history of the network. You can get by with only copying your peers' most recent notes.