Instead of a quota you can do something like:
zfs create -o canmount=no -o readonly=on -o refreservation=10g pool/emergency-space
which lets you either dial down the referservation property (with zfs set) or destroy the emergency-space dataset, if you run the rest of the pool out of free space.
But you can do that *and* use quotas. However, quotas have the annoying habit of needing to be adjusted upwards when you move data off a pool; and the more annoying habit of being forgotten about until you actually run into them on a no-longer-very-full pool. They can also create hassle on the receive side if you send rolling backups to another pool (all your old snapshots will count towards the quota property, and did you remember to reset it after the first receive?).