In general, it looks to me like the protocol is designed to delegate most machine-level decisions about an account's timeline to the index server, so any time there's ambiguity there, I incline toward the interpretation that the host server is passively accepting the timeline served by the index server. So my guess would be that content filtering is handled by the algorithm and served to the host server that way, but that's just a guess.
Circling back: "Are blocks processed at the host or index level?" I think the post below suggests that posts by blocked accounts are probably filtered out by the index server, not the server where your account is hosted. That seems to me the best explanation for why they're visible on the protocol: so that indexers can use that info to arrange the user's timeline. Otherwise, the blocks could be handled by the host, with no need to make them public. But I may be missing some nuance here.