My suggestion is to not try to emulate reality so closely. Fake it.
Have the snow particles die when they pass the bottom of the screen. Then over time have snow accumulate on the surfaces. Snow on the surface doesn't have to equate to the exact particles that fell.
But if you really really want to do it that way...
First you're going to have to deal somehow with collisions between the snow and the ground, and then later between the snow and the snow on the ground. Which since you're not keeping them all in an array any longer would have to be based on the pixels of snow. That's a lot of glreadpixles. But that's not asked in this question so I'll assume you got that one covered.
j-p's answer isn't bad. But I would probably do it a little different:
You can do it with only one dynamic texture. Render like this:
- render backplate
- render accumulated snow texture on to the backplate
- render the snow particles.
Then any time the snow particle hits the ground or whatever it's colliding with do this:
- don't glclear it - so it will still contain all the previously fallen snow
- render the collided particles to the dynamic snow texture
- retire the snow particles that you drew on the dynamic texture - those are now "landed"
Then the next frame/cycle your dynamic accumulated snow texture will have the fallen snow on it.