You could do a loopback network filesystem and make any user-space FS you want. That's what WSL does, and there's a Rust crate for it. Can't recall the name at all.
There is NFS and FUSE so you can write your own implementation, but you are still stuck with the interface that the kernel understands.