I thought wireguard is kernel-mode software and I disliked it because of that. Interesting, may be there's Linux version of user-mode wireguard. I wonder what's the performance difference between usermode and kernelmode wireguard.
There is also BoringTun: https://github.com/cloudflare/boringtun which is faster
Disclaimer: I wrote BoringTun
There's also official documentation for how a userspace implementation should behave. [1]
The android version of WireGuard has a userspace implementation for devices without WireGuard in the kernel, which at the moment is pretty much all.