I have previously found Bluesky kind of confusing, but I've recently realized that it was mostly the terminology that was confusing me.
Imagine if you instead referred to the the system as
[microblogs] -> [indexer] -> [client]
There's a lot more to it, but I think this is the basics of how Bluesky works. They just call everything something different than you might think it should be called.
The indexer is only necessary because the user ids do not remain static on the system. Instead there is some weird cryptographic reshuffling going on where DID:PLC starts as a substring of a hash and then because of 'key rotation' the user id of every user actually changes out from under the user themselves over time.
Imagine a system such as Livejournal but your handle is constantly changing so you need an authority to keep track of the handle changing. And of course you are only allowed to post short messages with no titles or markdown support.
I'm personally waiting for a new DID:PLC where you can get a static pubkey where you sign the messages with a private key because I think that'll be way less stuff to keep track of and it'll make self-hosting and local-first development much easier.