Flatpak also has atomic transactional updates (and automatic deduplication similar to nix) via ostree.
Also, Snap doesn't use namespaces, they install each app in a separate prefix which the app finds via various environment variables. Then it uses apparmour to make the /usr, etc unreadable to the app.
Thank you both for answering. One question I have is about "targeting GUI apps". Why wouldn't developers be able to distribute non-GUI apps using Flatpak and AppImage?