C++ is useful for implementing the guts of things. And when implementing, having your own library of shared C++ code is useful, as long as you completely control it and always compile it with your project from scratch (a library of templates, for instance). The last thing you want is to link to someone else's compiled C++ library because that's where the pain begins.
To expose a C++ implementation, use a plain C interface; the C application binary interface works very well across compilers. If you feel it absolutely necessary to expose something like the inheritance scheme of an object-oriented design, you had better do it in a language like Objective-C that can at least implement objects in a very forward-compatible way (or use tricks like exposing pointer parameters in C functions).