One of the challenges with the API will be memory management. C++ doesn’t bother with it, so it’s up to the programmer, but Python does bother with it, using a reference counting system.
Many API functions take a pointer and store it somewhere accessible after that function returns. In that case, and only in that case, you have to increment the reference count, so Python won’t delete the object prematurely. For example, BWindow::AddChild(BView **, …), and a number of similar interface kit functions. BMenuItem’s constructor doesn’t copy the BMessage. Etc.
I assume the BWindow interface constructor creates a new Python thread state and that it’s handled appropriately in all the callbacks etc. If not, of course that’s another thing to look into.