It turns that there exist a Linux subsystem called CUSE (character device in userspace), largely inspired/being a part of FUSE (filesystem in userspace). It seems to support what I need in terms of supported system calls, namely `open()`, `ioctl()` and others.
https://github.com/torvalds/linux/blob/master/fs/fuse/cuse.c
It is worth checking it out. Using it will likely require some test setup actions to be done with elevated privileges, but that is a part of the game when dealing with drivers, I guess.