I think you can workaround this by making sure that you
queue_free() those explosion nodes regardless, but you have to know the time it takes for the explosion to fade out:
# Assuming explosion is momentary, not needed for smoke-like effects.
one_shot = true
# Start emitting.
emitting = true
# Adjust the time it would take for the explosion to fade out.
var seconds = lifetime * 2 # Can be different...
# Create a timer and delete node once particles are finished emitting.
get_tree().create_timer(seconds).connect("timeout", self, "queue_free")
Unfortunately, there seems to be no built-in signal which allows you to do this for
one_shot particles, so that's the only way I can think of to solve this problem.