(Updated Sept 2022)
On Linux, btrfs is the simplest option for snapshots within a filesystem. It is reasonably stable and complete as long as you don't use the RAID features. It does have some fsck and repair tools.
ZFS is another option with good snapshot support, and is now cross-platform for Linux, FreeBSD, etc. It's actively developed by the OpenZFS project, and is more complete than btrfs.
This LVM answer has some details on the pro's and con's of using LVM snapshots, and some btrfs/ZFS links. With some filesystems (ext4 and XFS), LVM will take care of freezing the FS before it takes the snapshot, but LVM snapshots can have performance problems and still have some bugs.
I don't think LVM is a great solution for this 'quick snapshot of user data' application - it's still weaker than btrfs or ZFS in 2022.
You may also want to look at rsnapshot, which is a user-space tool that creates snapshots using any filesystem, without using LVM.
Since rsnapshot uses rsync and stores the snapshots under a series of directories, using hard links between different snapshots if a file has not changed, it can run surprisingly quickly even on reasonably large sets of files.
It is used a lot for backups but can also be used for this sort of user-data snapshot requirement, and with a little setup can enable anyone to restore their snapshotted files, by using read-only NFS or Samba - see this HOWTO section on restoring files. Files can be restored with standard Linux tools as rsnapshot mirrors the source directory into each snapshot directory.
rsnapshot is quite flexible using its standard features, and since it's written in Perl it's quite easy to customise it, e.g. if you want to provide on-demand snapshots. The main drawbacks compared to filesystem snapshots are speed and disk space - each file that changes results in a new copy in the snapshot, whereas filesystem snapshots only copy new blocks in the file.