Our backup infrastructure leverages zfs send/receive functionnality via syncoid from the sanoid package. We use a custom script called bacoid, which gets its config files via zfs config. Backups are sent to two PBS servers that are in lxc containers.
Since zfs config variables are recursive, settin syncoid:* config files on rpool will then mean that every volume will be backed up. To exclude a volume that you don't want backed up, you can set syncoid:pool_a and syncoid:pool_b as empty.
Also, bacoid does not create a new snapshot when sending a backup. It thus relies on sanoid to create the snapshot, which are then sent with bacoid.