Thinking about it, I think it could be done with some sort of buffer (not sure that's the word I want; Accumulation/Cache shader maybe) shader, which takes a input, captures it, and applies some sort of effect like merge shaders. We'd obviously want an "Add" feature. Then whatever is passed to it that frame, is saved, and always there, and anything else any other frame "Added" to what was before it. That way you could feed a particle to it via a conditional scalar where that condition is if it's intersecting the terrain.