Ok, I have been looking into this a bit more, and I managed to create a first test plugin that alters the sound
To do this, I added a function pointer to dsp.c:
static void (*dsp_external)(int32_t* src, int count);
And I made dsp_process use this function if it is not NULL.
I also added a function to edit this pointer to dsp.h, and I then added this edit function to the plugin structure.
Finally I initialized the dsp callback function at the start of the plugin, and set it back to NULL when the plugin was finished.
For now I just tested a plugin that lowers the volume as a test, and this works, although there is a delay of a few seconds it seems between starting the plugin and hearing the volume drop (which is probably not that much of a problem for most plugins)
My suggestion if more people think this kind of functionality would be useful is to create an array of dsp function pointers, along with a function to add and remove dsp functions from that array.
That way you could even enable multiple sound plugins, and the current dsp functions (equalizer and crossfeed) could also be added by default to the same array.