The best answer would be to make use of some unused signals (i.e. SIGUSR1 / SIGUSR2)
Upon receiving a SIGUSR1, the program would know to re-direct stdout to NULL (or some pre-arranged file).
Upon receiving a SIGUSR2, the program would know to re-direct stderr to NULL (or some pre-arranged file)
Re-directing is very easily accomplished with the freopen() command. See this question. The handler should call fflush(), then re-assign stdout/stderr elsewhere.
So, foo --hush-out should find the running instance of foo and send it a SIGUSR1, likewise (but a different signal) for --hush-err.
If you are already using SIGUSR1/SIGUSR2, fear not, there are likely more not being handled that could be.
Of course, signals are not a very elegant example of IPC, however if some file is arranged at start up, that's not a big deal.
NULL is likely going to be /dev/null on your system, but such a character device can exist anywhere.
If for some reason you can't modify the program .. just use the screen trick, if your forced to use the local console.