Upcasting from a base class to a derived class is a warning sign of a potentially bad design. Normally, the interface methods would make calls to any additional methods to provide extra functionality, but would not require the user of the API to call those methods directly.
If you are set on using the this particular library, then you're pretty much stuck creating factory methods for whatever derived classes you plan to use.
I'm sorry if you didn't find my first answer helpful. I though you were interfacing with your own C++ code, as you stated in your first post. In that case, my answer was intended to give you an opportunity to rethink the design of the C++ API and possibly eliminate the need for upcasting.