I'd use the vertex shader to position the particles (just draw each particle as a triangle or a quad). Then if post processing was needed I'd use the fragment shader.
This is more or less the way I'd do it too (the only thing I might change would be to add a geometry shader for the initial positioning and expand to a quad from there, but admittedly this won't fit with the requirement to move to GL ES).
The way I'd then set it up would be to calculate a bunch of properties for each particle in an emitter when the emitter is spawned; these might include initial position, velocity, direction, gravity, etc. They're stored out as vertex attributes one-time only here. Then for each emitter you would send a delta between the time now and the time when it was spawned as a uniform, using a combination of this delta and the properties (i.e. vertex attribs) to determine the particles current position. That should work well enough if you're not doing anything too fancy with them.