People are annoyed by canonical shoving snaps into their mouth at every opportunity (people want to choose when to use them by themselves), but there are many legitimate reasons for existence of snap and flatpak. Here are some of them:
the app developers themselves are in full control of their app's distribution and updates instead of relying on distro maintainers. devs getting some angry mails for bugs already fixed but not yet included by distros is tale as old as time.
simplified dependency management. what's stopping the dev from packaging their app using distro's native package management instead? whelp, they don't want to deal with this stuff. It can be a hard work, and there are dozens of distros out there to support.
protecting users data. when you run an app installed from your distro's package manager, you know you can trust it because your distro maintainers have vetted the app to make sure it doesn't read your mail or your browser history or your ssh keys. when you download the app from a third party source, you can only pray to god that those apps won't mess with your data behind your back. You don't have to worry about that when you use sandboxed apps like flatpak.
As an end user I actually love them (yes I know, sacrilege). Flatpak is my preference, but I also prefer pretty much anything to Ubuntu in its defailg state so that might have something to do with it.
Packaging applications is a hard work so they obviously want the devs to do it themselves. For example, canonical push hard so their users use snap for firefox because it's maintained by firefox devs themselves. Firefox updates very often and has complex build system, so I think canonical is tired of allocating significant resource to support it and want to stop maintaining firefox package if they can.
Flatpak:
To limit shady proprietary software from accessing your full storage / hardware.
You can manage the sandbox access through tools like FlatSeal.
Snap:
To ruin your day / user experience.
Both where introduced as a universal way to distribute packages on various distros.
If you're using a stable distro, the repo will end up with programs that are years out of date. So instead of compiling manually, you use flatpak/snap/appimage/nix/guix as an extra package manager. They also allow devs to release cross-distro packages.