snaps are executed on top of their base snap … i.e. a snap with
base: core18 uses core18 as its rootfs inside its confinement. so if you install a base: core18 snap on a 16.04 system, the executables will in fact run on top of a 18.04 userspace …
the kernel features snaps use are rather generic security features (seccomp, apparmor, namespaces, cgroups, …) that are available in all kernels since 4.x (4.4 i think). if snapd finds a kernel feature missing it is able to run the appliactions with degraded confinement (you can check this with the
snap debug confinement and
snap debug sandbox-features commands)
Ubuntu Core has a very specific boot process that is managed by initramfs scripts to assemble a rootfs of the various layers … i.e. on boot the “writable” partition gets mounted, the core(18,20) squashfs from the snap is searched and mounted as readonly filesystem, writable bits are established as bind mounts hooked into this readonly fs where required. once this mount assembly is done, the system switches to the assembled stack and it becomes your rootfs.
in core16 we were still building the initrd.img as a part of the core snap itself to make sure the binaries there match whats in the rootfs. when building a kernel snap the core snap is downloaded and the initrd.img from there is used (potential changes like adding kernel modules or firmware are achieved by unpacking/re-packing of the initrd.img file)
this setup was also used in core18 (simply re-using the initrd.img from the core(16) snap). with core20 there is now a pre-built initrd.img that is pulled from launchpad instead of pulling it ut of the core snap.
kernels are bundled with Ubuntu Core images (simply to boot from), but not for snap applications running on some classically installed distro, there is no direct connection between kernels (beyond, well requiring certain options to be set for full confinement) and snap packages.
the Ubuntu Core kernels are simply a “snapped version” of the kernels shipped with the respective release (i.e. UC16 -> 4.4, UC18 -> 4.15, UC20 -> 5.4)
tl;dr: kernels are only relevant for Ubuntu Core installations, nt for snap packages in general