The Mastodon implementation of this is legitimately flawed.
The issue is you need users to be independent of servers.
That isn't hard to implement. Make the user ID in the protocol the user's public key and user@domain is just a human-friendly pointer. If you transition from user@a to user@b, your pointer changes -- or you can use both for an indeterminate amount of time -- but the public key stays the same and so everyone who followed you or signed up for your feed still sees it.
The current implementation is broken for multiple reasons.
First, it makes you have to care who is hosting you, because if they become adversarial or go out of business or you become large enough to want to self-host, you lose your account. That shouldn't happen.
Second, with users tied to hosts, it becomes "convenient" for hosts ban entire other hosts, which is poison because it's the dynamic that led to the bulk of email moving to GMail and Outlook. Once providers are big enough they can ban smaller ones ("for spam filtering") to exclude competitors. The protocol needs to prevent this by making the host fungible. Not doing so is a significant design flaw.