I'm not at liberty to open source my solution, but here's the gist:
The goal is to have NGUI manage the draw order of the material that the particle system uses. The easiest way I found to do this was to create my own widget type/subclass, which overrides the material property, returning the particles system's desired material. NGUI will now manage the creation of an instance of that material with the correct render queue set, and all I have to do is assign the widget's drawCall.dynamicMaterial to the particle system renderer (usually in update since it could change).
Of course the devil's in the details, but that should get you going. Once that's set up, you can extend it to general Renderers like MeshRenderer and LineRenderer (or in my case, start general), and add soft clipping support (which has to work in world space instead of panel-space).
Good luck!