> And these modules can be compiled without including actual kernel code (which would then contaminate the ZFS module objects via the GPL2 inclusion clause)?
Yes. Quite a lot of effort goes into ensuring that there's no breach going on whenever the kernel changes.
> How do the modules keep up with the continually-changing kernel?
The efforts of the ZFSonLinux dev team - who joined the OpenZFS group a few years back (OpenZFS is an effort to make sure ZFS is harmonised/synchronised across as many platforms as possible. It's the canonical non-Oracle fork.)
It helps that Lawrence Livermore labs are using ZFS because of its scaling abilities and as a result there's at least one fulltime developer able to work on it. Coupled with fulltime devs working on the other OS port commercial versions, you don't get the problem of one man abandonware or the Poeterring Effect.
Rather than asking silly questions, why not check out zfsonlinux.org and openzfs.org ?