"linux-generic" is a metapackage that depends on both "linux-image-generic"
and "linux-headers-generic", which are themselves metapackages that depend on
the latest available version (in Trisquel's repository) of the kernel and of
its headers.
So, the difference is that installing "linux-generic" rather than on
"linux-image-generic" you additionally get the headers. You do not need them
unless you want to install additional drivers.
The so-called "virtual" kernels do not seem to exist anymore. The related
metapackages depend on "generic" kernels.