This is only a tangent given we are talking about snapshots and reflink, but just wanted to mention that LVM has snapshots, so if you need XFS snapshots, create the XFS filesystem on top of an LVM logical volume.
It's worth noting that, while LVM can support snapshots for XFS (or any other filesystem, really), the performance penalty is almost entirely unacceptable (one benchmark[0] shows an up to 60% drop in write throughput), so ideally your process should be something like
1. Snapshot LVM volume
2. Mount the LVM volume and back the snapshot up somewhere else
3. Delete the snapshot as soon as possible
Otherwise you're going to lose a ton of performance.