Most likely the reason they all poof at once is Garbage Collection. There is no emitter pool or decal pool that the created components are placed in so there is no reference to hold them in memory. To verify this is/was the case you could force garbage collection with the console command “obj gc” and see if you see the poofing behavior.
As with all things GC the solution is to make sure you have a reference to the created components. The reason why your decal actor approach works is now that you have an Actor it is a member of the level and so garbage collection won’t touch it. Of course using an Actor is somewhat more heavy weight as you have an actor wrapping the component, so it would be more ideal to have only the component.
Perhaps a single footstep manager actor that keeps the list of footstep emitters and decals might be the way to go.