jakaskerl I did experience that, so I just dropped back and built only the pipeline from python, which after some utterly ignorant guesswork and reading the pybind11 docs has worked! I still need to clean up the project for a minimal example because I have ugly code strewn about everywhere but I was able to create a pipeline in cpp, pass to the python script, attach a simple XLinkIn->XLinkOut example to the pipeline and extract it from the returned py::object then assign it to the device on the cpp side and do an echo! Unsure if this will be useful for anyone else owing to the fact that as you said the device must still be configured on the cpp side but I think it's still rather neat.
I suppose one might be able to feed in DeviceInfo object to the python script and configure that as well then back in C++ use the Device(const Pipeline& pipeline, const DeviceInfo& devInfo); constructor to set up the device as well as the pipeline?