I disagree with the readability part. I do heavy use of "WITH" to name my intermediate steps and comment the tricky parts (as I would do with any other programming language) and my colleagues find them pretty readable(or that's what I'm told). That's how I "reverse engineer" such monster queries, refactoring them in intermediate relations with names. Pretty often the same subselect is used more than once.
In fact, due the lack of side effects it's much easier to do than with procedural code.
In fact, due the lack of side effects it's much easier to do than with procedural code.