One of the advantages that come with copy-on-write designs is that snapshots and other filesystem manipulations are much easier. Because ZFS creates a copy on each file modification, it's easy to mark the old file as part of snapshot rather than as blocks to be deleted. For ZFS, a snapshot is simply of list of pointers to old copies of files from a certain point in time.
A similar feature is the bookmark, which is just a list of all changes since a point in time.
A clone is a copy of a dataset built off of a snapshot. All changes to the cloned dataset are independent of the original dataset, but both share the snapshot that was used to create the clone. The advantage of a snapshot is the ability to restore the filesystem to an earlier state. A clone is useful because only the changes to the dataset are written to disk, saving space if two datasets share many files.