The FUSE implementation in the OpenBSD follows the customary C libfuse API but the kernel messages differ a lot from Linux, Mac, and FreeBSD. With some advice from Jacek Masiulaniec, I adapted
bazil.org/fuse but found that approach increasingly messy and unlikely to track future
bazil.org changes. At David Presotto's good suggestion, I changed my code to instead operate as a userland translator from the Linux-standard FUSE kernel message protocol to the OpenBSD FUSE kernel message protocol. This might not be the fastest possible design, but it has the best chance of surviving changes to OpenBSD,
bazil.org and upspinfs.
The current status is that my translator partly works, but OpenBSD FUSE is sometimes issuing messages that don't make sense to me. I'm trying to learn enough about the kernel to debug this, but my computer science education was in other areas, so I'm essentially taking myself back to self-study grad school OS. Be patient; I'll eventually get there because I live on OpenBSD personally and definitely need to make upspinfs work.