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.