The way it works is more or less like this:
The XMl contains every element of the post. Each element is a wrapper with the name of the tag, and then contains both the raw version of the text, as well as a basic HTML version of the text. Having the HTML version pre-computed speeds up rendering for simple tags, but some tags (like mentions) still use some additional processing to dynamically retrieve the updated username and hide deleted users.
- Content
- Content
- Tag name: link, center, bold, etc.
- Content
What I think happens related to disabling extensions, is that when a tag name is no longer registered in Flarum, then Flarum will return the raw text for that tag since it can't process the post-render logic for that tag anymore.
However TextFormatter tag names can be different from unique markdown or bbcode tags, and some bbcode and markdown actually re-use the same TextFormatter tag names. This means bbcode links or images actually continue to work (until edited) when you disable bbcode but keep markdown active. Bold seems to be handled differently between markdown and bbcode however because they don't render anymore.
Blocks like [center]
could actually continue to render if you had a plugin registering another center syntax that can use the same internal tag name.