Great answers, I may just add some spin ...
For #1, try not to plan too far ahead. Any investment you make in planning, analyzing, designing things that later change is spoilage. I used to chide management about the difference between precision and accuracy. We had very precise plans that were completely wrong after the first day. Why invest in making them? BTW: I don't have that complaint any more.
Try to find "barely sufficient" planning for the next iteration.
For #2, rapid iterations of delivered software may still be too long. Look at how you gather and express requirements. Can you move from ambiguous asynchronous e-mail to interactive paper prototyping and acceptance
test authoring? More precision in requirements doesn't have to mean heavy, document-laden processes, maybe just asking better questions.
For #3 & 4, a mismatch of what's delivered to what's needed sounds like waterfall-style handoffs. See if you can turn the whole thing into a more continuous process. We try to have our customer (proxy), QA and developers in close touch from start to finish. We're not happy with the degree of collaboration yet - it takes some real discipline to keep developers from going into heads down coding.