As a relative newcomer to the notion of federation myself, hopefully I can explain things accurately and simply based on what I’ve learned…
Anyone on any instance can find anyone else on any instance, as long as those two instances aren’t blocked from federating with each other by their admins. However, searching for a user with just “@username” will only turn up people on your instance. To find someone on another instance, you have to search for their full “@username@server.tld” address. That makes it harder to find total randos by just their username handle, but I don’t think that’s necessarily a bad thing. Popular people (from Hollywood celebs down to Twitch streamers) have a wide enough media presence that you could easily get their full address from elsenet, while people you’re friends with will be able to give you their address directly.
Federation between servers is actually driven by users, not the instance admins. You can’t spin up a Mastodon (or GNU social) instance and say “I’m going to federate with X, Y, and Z”, or “I’m going to send my posts to A, B, and C”. By default, every instance is an island. Users on that instance will only ever see posts from other users on that instance. The only external content that federates is the result of following users on other instances. If @doe@deer.party follows @fox@hen.house, fox’s posts will federate to deer.party, but not anyone else’s from hen.house. Similarly, doe’s posts on deer.party will only federate to other instances if people on those instances follow them. There isn’t actually some network-wide all-posts firehose that you can hook into, or even a way to pull everything from one instance onto another without manually following everyone who posts there.
Conversation replies aren’t posted to the public timeline (unless it’s just you replying to yourself to create a thread), and will only appear in your Home (people you follow) feed if you follow both participants (I’m not 100% sure how multi-party replies are handled, so I won’t speculate). You can’t hack around this with the “.@” trick, either - the timeline ignores replies based on the metadata that identifies them as such. So in your scenario, the person on instance C won’t see any portions of the conversation between the users on instances A and B.
You can still click on a user to see their profile and a list of all of their posts, and in that case, you will see their conversation replies.
So, if joe@instanceC follows jane@instanceB, he won’t see Jane’s replies to hannah@instanceA unless he also follows Hannah. However, if Joe looks at Jane’s profile, he’ll see those replies as part of her personal timeline. I’m fairly certain that, as long as instanceC’s admin hasn’t blocked federation with instanceA, Joe will be able to see their full conversation if he clicks on one of Jane’s posts (I could be wrong, and at least one person on instanceC has to be following Hannah for her posts to show up - this is farther into the weeds than I’ve personally dug yet, but my experience so far hasn’t turned up enough cases of partial conversations to draw any firm conclusions on why a thread is broken).
For anyone who might inexplicably be interested in hearing what I have to say about completely random topics, I’m @alahmnat@mastodon.social. Accept No Substitoots