libpd gets to be too slow to work only in PD here, and Heavy seems to halt forever in not being up-to-date even on Vanilla objects, so i am wondering:
How can i approach sending audio/control data to be processed by a piece of C++ code (say a ring modulator), and then feed the result back into my PD patch?

Roadmaps are welcome, as always, and thank you in advance.

    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)