Update: Haskell is just so incredibly hard to link to, I don't think the FFI approach is good enough for now. If cabal ever implements the "type: native-static" option in the foreign-library stanza, then I think it could work, but until then, no. Without that, the options boil down to distributing thirty enormous dynamic libraries, or using a custom build of GHC with -fPIC, which is just too much work. I was optimistic but that was when I hadn't yet dived into the world of haskell tooling. It works fine for binaries, but practically nobody is linking to haskell libraries from non-haskell code, so nobody has really thought about how to make it easy.
As an alternative, I think I might strip down the pandoc-citeproc program to its library-reading parts, emit a sub- and super-set of CSL-JSON with Pandoc AST inlines instead of strings, and parse the resulting stdout from Rust. It wouldn't be an addition to the CSL-JSON spec, it would just come with a big honking warning saying that the output is unstable, unspecified and for internal use only.