The particle handle reference is interesting. As far as I can tell the handle holds the particle index, and then the system updates the index held by the handle whenever it needs to change. Changes being things like the particle being destroyed, cloned or moved in the list. Initially I assumed the index would be static, but it looks like they swap the particles into a new buffer during the deletion phase so living particles would have their index values change. So quite a lot of book keeping to keep the handle valid.
I spent a bit of time recently looking at generational indexes, and I think they probably solve this problem a little better. Depending on the data layout though it might mess with cache coherency, which would be bad.
For anyone interested generational indexing basically involves putting a generation field on each entity, then when something wants to hold reference to it you return a value that combines the index and the generation. When that reference needs to be resolved you compare the generations of the entity and the reference, if they match it's still the same entity.