a longer explanation would mention the different _software_ each instance might run. you might interact with very different front-ends (how they present UI themes, render threads, notifications, etc). and backends have different support too (emoji-based post reactions; quote-replies/boosts; chat features/integrations). although there's _some_ tendency for the backend features to converge, they often converge only to the level of compatibility (a :100: emoji reaction from one server will show up as a flair-less 'like' on an server that doesn't want the full feature) and sometimes one region of the space _really doesn't want a specific feature_ (Mastodon.social famously is dead-set against quote boosts). your preferences will directly shape which feature set you desire, and it'll tend to land you in an area of peers that share these preferences (shaping your local timeline and also drawing a circle around some peers where you can be reasonably confident that "this area of the fediverse will grow in a way that keeps our instances well-connected").
it's a really organic thing. your original question could just as well be framed "if the thing works regardless of provider, why isn't everyone just _their own_ provider" instead of "why doesn't everyone use _the same single_ provider". right now the forces oppose both ends, and you get a decentralized (not distributed) fediverse.