There shouldn't be any cycles in properly broken out plan, because the flow of time creates a causal directness; a true cycle would prevent any of the tasks involved from starting, which obviously doesn't happen in real life. Sometimes you may need to break things down a bit more.
And that's why I'm asking for a tool that lets me model projects as Directed Acyclic Graphs of tasks. Because all I seem to be getting in popular tools is a flat list with some categorizing, or a single level of subtasks at best. I want to be able to express directly that this subtask has sub-subtasks, and that this sub-subtask depends on completion of a subtask from some other task (without making it a dependency between root tasks).