Hi David,
The intention behind the "defuse" was to essentially *pause* a workflow. Only the immediate child gets defused because the idea is that you can reignite just that child, and the rest of that workflow will continue to run as normal. This was the simplest solution to implement, although it does lead to some issues (for example, the children of DEFUSED fireworks are in the "WAITING" state, although they may never be eligible to run unless you reignite it).
In terms of rules for the state of the overall workflow, the code is relatively straightforward to look through: fireworks.core.firework.Workflow#state in fireworks/core/firework.py:760
For example, if *any* of the fireworks are DEFUSED, then the overall workflow state will be DEFUSED.
Thus, if you simply want to delete any workflows that have either completed or for which you've defused any firework inside, you could do:
lpad delete_wflows -s COMPLETED
lpad delete_wflows -s DEFUSED
Let me know if that works ...