Why exactly is the 32bit openEXR format so HUGE
32 bits = 4 bytes per channel
so for example a uncompressed floatingpoint image of fullhd is 4*1920*1080=8294400 bytes or simply put divide that 2 times with 1024 for 7.91 Megabytes thats the baseline amount fo data per channel in a 32 bit image any compression on top starts with that number.
How can I direct different rays to different buffers?
Write your own shaders or find some shader that does exactly what you want (note it becomes increasingly more unlikely that that will happen as you go forward). Puppet has a few good shaders that can go a long way (mainly hes collected shaders from others asn relesed them as his own, but note he has collected! And he releases source), he for example has a rayswitcher material called ray type. It does not do entirely for your needs but its a good start.
They idea is to force the final pixel result, reflections, refractions, specular, hilights etc to write to the color buffer,
just as they do in the interactive renderer.
If you write the shader on your own you can do that, since every time you calculate you can cache, but its NOT necceserily possible to devise this in shading network unless the shading network can separate each aspect of each shader. So for example specular, diffuse, incandescence, no problem. Anything to do with mia material big problems because you can not use many different misa to composite the result, its allways allready compositted.
Global illumination sis a bit of a problem allways as the photons all go in one map and theres really no way to separate them later. That is unless you worte the lightshaders aswell then you might be bale to tag the different things differently.