A storage of type "zfspool" makes direct use of the ZFS features. You can only use it to store virtual disks for LXCs (this will then create a dataset on that ZFS pool) and VMs (this will create a zvol on that ZFS pool).
A storage of type "dir" is just pointing to any folder on any filesystem. Such a folder can also be the mountpoint of a ZFS dataset. Here you can only store files. Files could be ISOs, LXC templates, snippets, backups and even virtual disks. But these virtual disks then have to be stored as a file, so you get a qcow2 virtual disk.