Hi Nick,
As far as I can tell from a quick look at hsqml, the stuff in Setup.hs isn't related to C2HS. What's more relevant is that hsqml defines a C library wrapper around the C++ library it uses -- C2HS is only used on that C wrapper, not on the C++ library itself. In general, C2HS doesn't support C++ at all, because it needs to be able to parse the header files that it includes and we use the C parser from the languagge-c package to do that. Any C++ constructs will just cause breakage. And your "old school" FFI definition doesn't look in any header files, which is why it has no trouble.
Basically, if you want to do something like what hsqml does, just take a look in the cbits directory there, in particular at hsqml.h which is the header that defines the C wrapper around the C++ library. This hsqml.h header is the one that's included in the C2HS files. If you want to wrap a C++ library directly, C2HS probably isn't the tool for the job. I know there was some work during the last GSOC on a C++ FFI wrapper, but I don't know if anything concrete came of it.
Cheers,
Ian.