"cp -l" makes hard links. You can't make hard links between different filesystems.
You could set up a tree of symlinks, but a tree of links (hard or soft) also
doesn't have the same behaviour as a true unionfs or union mount. If you
open a symlink to a read-only file on a CD-ROM then you get a file handle
that points to a read-only file. If you stack a writable layer on top of
a read-only layer using a union then you can open a file on the CD-ROM
for modification and the modified version will end up on the writable
layer and be seen by subsequent readers in place of the original on the lower
layer. It works with existing applications that just call open() and write()
naively. Without something like a union filesystem to do this for you, the
application would have to know about the tree of links trick and explicitly
do the "remove the link, copy the file, modify the copy" work itself.