flatpak requires a desktop session so one straightforward difference is that snaps make sense on servers and iot devices which has to be said is probably where 90% of linux systems live on, and I think where Canonical's business focus has been.
Practical example, I use nextcloud as a snap, which requires basically one command, it self updating, shares the same IP as the host whereas each docker container would have a separate ip. If you only want to isolate an individual application on a host system (which is a common use-case) most container technologies are overkill.
docker run --network=host was available several years earlier than snap.