Based on the wording comment it sounds like there may be additional ways I haven't seen but you didn't really say what they were as much as dismiss the point assuming everyone knew what apps or release models you are familiar with.
I agree an in App Store solution like the one you describe would be the preferred answer for most users. Sideloading is more useful as a catch-all for anything Apple doesn't have a good first party answer for. Once non policy related use cases for the sideloading exist it's going to be easier for most to have a first party solution for those use cases.
I suspect that this model has some downsides considering good security practise would prevent the apps from sharing their namespace contents. And for end-users they might end with "MyCoolApp 1" at first, but then "MyCoolApp 2, MyCoolApp 3, MyCoolApp 4" unless they delete the old one. I think some app vendors even use the year as the release distinction but in true software engineering fashion those years and the actual release date tend to be out-of-sync (just like MS Office).
And it's still undetermined whether Apple would be required to host your app on their App Store once you've decided to run your own store. Which means you would be losing a major distribution channel.
As for 'side loading', it's somewhat possible, but even if it was available by default it would be messy for most customers -- they already have trouble with what's currently available. Perhaps some sort of in-app store would make that model feasible. The vendor gets to show and deploy whatever they want, and the end-user gets a very clear and very specific list of options for the app/vendor. That would even be better than the 'everyone in one store' model for some more specialised apps, especially when searching.