I think "Sending little bits of data and hoping they will somehow be reassembled correctly on the other side" is actually EXACTLY how Nostr works and that's a good thing!
I’m not a protocol developer, so this is probably a better question for someone like nostr:npub180cvv07tjdrrgpa0j7j7tmnyl2yr6yr7l8j4s3evf6u64th6gkwsyjh6w6 or nostr:npub1c878wu04lfqcl5avfy3p5x83ndpvedaxv0dg7pxthakq3jqdyzcs2n8avm, but you can read the docs to see how events are handled.
Here’s how I understand it: Your client has to sign a JSON message using your privkey and post it to all of the connected write relays. There’s no way to guarantee which relay has the most recent version of the event, it if even has it at all, so the protocol assumes the one with the newest timestamp is the only one that matters. Sending little bits of data and hoping they will somehow be reassembled correctly on the other side doesn’t play nice with decentralization, unless you’re talking about mining and blockchains, and we’re not.
Discussion
It’s funny, but that’s not an accurate description of what happens when you sign an event. Clients can display events differently, but the relays can’t sign them for you.
What I mean is that typically users send out little bits of data (which are each individually signed) and then the clients aggregate them into different views (for example, the list of people I follow, or the list of people following me or the list of replies to a post). In most cases, the user just sends out the granular action (zap, heart, reply) and it's up to the clients to query the relay and build up the aggregate list. But with the list of follows, it works different, the user keeps republishing the FULL list and the relay treats it as replaceable, it just seems inconsistent with how nostr typically works.
It’s not really inconsistent, because posts and reactions are one-off events, as opposed to lists that need curation. The protocol treats these differently.