Compression for zvols works the same way as for the rest of the pool: it probably doesn't work the way you think it does.
ZFS compresses blocks of data. Not files. Read that over a few times. Then read these words: ZFS uses a variable block size.
Now to make sense of this. Let's pretend you have a highly compressible file, two megabytes long. You're used to running "gzip" on the whole thing and having it end up as 200KB. ZFS compression DOES NOT WORK THAT WAY.
Instead, your file is broken up into ZFS blocks. FreeNAS defaults to 128KB blocks. So your file gets transformed into 16 blocks. Without compression, each one would be 128KB. However, with compression, it could be less... if a smaller blocksize can be used to store the data, then ZFS does. So for compressible data, perhaps your blocks can be compressed down to an average of 32KB. That number may not be as attractive as the per-file compression ratio. In a normal gzip-on-a-file run, the compression dictionary is potentially built over the set of the entire file contents, right? But ZFS cannot do that, because you might want to modify the blocks in the middle of the file. So the compression ratio may be less than the file-based gzip, but it is totally transparent to the user.
So this translates very directly to your question: how does a zvol work? And the answer is: "really easily." The zvol is not particularly aware of or involved in the compression; it looks like and thinks that it is just a standard volume. Under the hood, though, when ZFS is pushing blocks to and from the pool, it'll take care of the compression and decompression of the blocks transparently.
Do note that there's some interesting implications in here. You probably want a large blocksize for compression to work more effectively, but that will have performance impacts for updating single 512-byte sectors of a virtual disk created on top of the zvol because the zvol will have to read a block, decompress it to a 128K chunk, do the update, then recompress the 128K chunk and chuck it back out to the pool. iSCSI gets really fun with ZFS.