Either way, it's much more elegant and portable than something like FUSE.
9P is a small generic protocol that is often independently implemented because of its simplicity, so there are many heterogenous libraries for it.
In contrast, 9P is just a byte stream protocol that ranges from weekend project implementations in ~1000 LoC (yet still perfectly usable) to full strength client-server libraries. It's much more versatile and can be done entirely in userspace without special kernel cooperation beyond a basic POSIX runtime.
TLS tunneling is common. v9fs and diod give SSH port forwarding as an option. It's very generic, so the options are plentiful. 9P is formally transport-agnostic, from what I recall. Plan 9 natively preferred IL over TCP for a while before officially deprecating it around 2003.
Find it here:
Ideas on how to present resources as file systems can be found in the original Plan 9 and Inferno papers.
In addition, Charles Forsyth's "The Ubiquitous File Server in Plan 9" might also prove useful.
After that, there's always the source code of the 9P file systems shipped with Plan 9.
The Plan 9 web pages are really good (if dense).
If you write in Go, check out github.com/rminnich/go9p.
For a deep dive, "A Cached WORM File System" is a good read [http://doc.cat-v.org/plan_9/misc/cw/].
I found it to be well written and interesting when I was a university student first going deep on the subject.
The Design and Implementation of the FreeBSD Operating System (2nd Edition) by McKusick is also well written and covers some of the same ground.