The main criticism I see as valid here is first point: software distribution is tricky. For macOS and Windows you basically have a model where you can go to a website, download a binary, install it, and it runs.
Most Linux distros won’t jive with that very well. And because every Linux distro uses a different theme and one of a dozen UI libraries/DEs/etc. the downloaded GUI application will look bad because it won’t fit in. Flatpacks and snaps really are a solution that just allows you to not pollute your OS file system (which was never designed with the concept of apps: there are no reasonable namespaces, no easy ways to uninstall, etc.) and to statically compile the app so the next OS update doesn’t break it.
If the distro contains everything you want in its repositories you can use an “App Store” front end to get what you need and the OS will helpfully keep it up to date which is more than you can say for Windows and almost what you can say for macOS. But if you need a third party app you are out of luck: including it in the distro is a process most people won’t want to undertake.
The solution is likely not going to make the nerds happy: something like snaps are the right abstraction for Applications (I am using the capitalized version here to distinguish it from system programs). What will also happen is that some Linux distros will support this kind of solution out of the box and will be the desktop distros. Not every Linux distro will be blessed with being able to run popular apps. Ubuntu is likely on the right track for this and the Unix purists will hate it more every year as it loses the original shared system philosophy and inches closer to what macOS provides.
So the real question is: do you use your Linux distro desktop for the kernel, the package system, the package repositories, or the 1337 cred?