Right lets start at the "beginning"
The ways I've understand and use it:
Host: They give the KVM-QEMU VM guests a block device. If you allocate it on ZFS as a ZVOL, it's a block device for all practical purposes, and the guest can write there within the boundaries. BUT the fun here, once you've written to it, it's "allocated" according to ZFS. the methods to "un-allocate" it is to have a compression option set, which will "clear out" like a record full of zeroes... or when the ZSFS is told that block is "trimmed" (Need to check how well this actually works)
Guests: They see a a block device. When you've enabled the TRIM options, a FSTRIM type command given to the SCSI/SATA bus, will be forwarded to the host's storage. That is totally OS/Filesystem INSIDE the guest dependent on when/how/if/whether it'll sent the TRIM commands or not. Another method to clear the storage, is of course to write zeroes on all the empty blocks which the compressing ZFS volume will clear out.
zpool trim: (Believe it or not, but I run zfs inside my VM too
) this is a feature where ZFS will scan that zpool's blocks, and issue TRIM commands to the underlying storage based on the views from ZFS whether that blocks is used or not. It's NOT issueing any qm guest commands from a host, and neither pushing anything from inside the guest out... only looking at the blocks, and the unused blocks are then send as FSTRIM/TRIM commands to the underlying storage device.
There are some qemu-guest-agent commands to initiate FSTRIMs, but I found it's easier to run the TRIM/sdelete/etc. commands inside the VM to zero the blocks, rewritten as "empty" by the compressing ZFS volume, and then the ZFS TRIM just works.