So, this is a kind of complicated question that has a couple of different moving parts, as you might expect from any complex system.

One: Your identity is as sticky as you make it. Fundamentally, your identity on the fediverse is simply your URI. No more, no less. If you have ownership of your domain name, then your identity is yours. If you don't, then you don't. This is decoupled from whether you have ownership of the servers you're actually posting on—you could pay masto.host $6 a month for a fully-managed Mastodon install, and as long as you're running it on your own domain, it's your own identity. You can pick up, take your database export, and move to any other software or host that you choose. In that sense, it's just like email, except without the spam/whitelist headaches of running your own email server.

Two: for most people, their identity is going to be tied to whatever server they sign up for. Honestly, for most people, this is fine. Servers are generally run by small, close-knit groups—unless you're on mastodon.social, they're more like subreddits or discord servers then like Twitter or Facebook. And with Mastodon specifically, there are lots of affordances within the software itself for "moving around" between servers—you can set up a "redirect" from one account (on one server) to another account (on another server, or even just at a different username), which automatically transfers all of your followers over. And of course, Mastodon has full data export built in (although it doesn't currently support importing old posts, since ... it's just not that common of a use-case to dig through someone's ancient tweets? If you want an archive of old posts, Mastodon is honestly not really the software package to look for, even just a simple HTML page with dynamic search would probably be better for most people). So yes, you definitely can sign up on any Mastodon instance and then opt to self-host later—as long as both instances are cooperating, and still alive when you want to make the transition.

Third: for apps, the answer is going to vary a bit depending on which software package you're talking about. The ActivityPub spec provides for a "client-to-server" API that's very generic and allows for tons of different "types" of user experiences to all coexist on the same host, acting as "client" interfaces, ala SMTP. However, very few people actually want to program for a "fully generic" server like this, and most fediverse projects instead support a more limited, purpose-specific API that encodes most of the "product logic" in the server, and allows for simpler, thin REST clients. The Mastodon API acts as a de-facto standard here, and it's basically just a clone of the Twitter API circa 2011. So, yes, there's a huge diversity of apps, as long as you're on a "Twitter-like" server looking for "Twitter-like" apps. Outside of this, there's less active development, so most servers just have the one client and the one intended UX.

And of course, between two servers, anything goes. Youtube-alike servers like Peertube talk easily with Twitter-alike servers like Mastodon which talk easily with Ghost-alike servers like WriteFreely. It's a shame that the "generic server" idea never took off, but I understand the tradeoffs involved, especially in user comprehension (Look at how Matrix bungled the "Identity provider / homeserver / client" UX for 99.9% of users).