In the cpp wrapper for libpd you could inject signals into Pd's audio and analog inputs and read from Pd's audio and analog outputs. These lines are where the Bela audio inputs are copied into Pd's audio inputs and these lines are where Pd's audio and analog outputs are copied into Bela's audio and analog outputs. By accessing the data before or after this you can prepend or append processing to the audio generated by Pd.
The custom render example does something like that by running an LFO in C++ which is controlled from Pd via messages. This LFO is then used to modulate the amplitude of the audio outputs that are generated by Pd. See the relevant lines here. This example is not particularly useful in real-life scenarios but it should show you the path.
You can also add extra channels by modifying the
gChannelsInUse variable before it is used here and then copy more channels in and out of Pd.
The only limitation of this approach is that if you are using the C++ code as an "effect loop" for Pd (i.e.: send a signal out of Pd , process it in C++ and send it back into Pd) you will add one block worth of latency to that signal.
jayrope d Heavy seems to halt forever in not being up-to-date even on Vanilla objects,
there is someone who stepped up to do more work on maintaining hvcc, see here and here. As far as I know they have upgraded it to work on Python 3 and added support for VST3. However, I don't think they have done much (or anything at all) in terms of supported objects (besides merging my contribution that was adding midi out)