I'm not sure, but i think it's impossible for a DSP plugin to alter the format of the stream. All you get to do is modify the samples. You also get some control over the length (you can output anywhere between half to double the length of your input), but as far as i know you get no control over the number of channels.
One workaround i'm using in a plugin i'm writing now is to write an output plugin that behaves as a DSP plugin. What you do is, you make an output plugin that loads another one so that you don't have to care about the actual output itself. You let the other plugin handle that. In your Open function, winamp reports the format of the source to your plugin, but here you can report anything you like to the other plugin. Then, when your Write function is called, you reserve some memory for your own format, write to it in any way you want (this is where you get to mix and process all you like!) and then pass your newly created buffer to the other plugin. Don't forget to get rid of it afterwards! Also, CanWrite reports the number of bytes a plugin can handle, so if you say, double the output, you should halve the value you get from the other plugin and report that in your own.
All the other functions should just call the equivalents in the plugin you load (unless you want to process something there as well).
Also, don't forget that to the other plugin, it looks as if your plugin is winamp! So anything that is "filled in by winamp" should now be filled in (or simply passed through) by you!
Hope that helps :-)