Unfortunately, we are under strict NDA and so can't discuss much here. If you do get a distribution agreement with Steam, feel free to shoot ms an email and I'll be happy to share code, though. What I can tell you without breaching the NDA is that I did indeed write a wrapper dll in c++, and then I used pinvoke to access it. Since it's a c++ API, it has all the features you'd expect there: header files, callbacks, etc. That would be very difficult to code to directly from pinvoke, so writing a small c++ wrapper was a way for me to actually substantially simplify the interface from the main game code.
Hope that helps! That's about as much as I can say.