There's a difference between unit testing and TDD. TDD requires you write a test specifying a wanted behaviour, write the code to pass the test (achieve the behaviour), refactor as needed, and repeat. Whether it's library, framework, model, view or controller code is irrelevant - you can apply TDD to them all. I think the biggest problem in reality is that few frameworks (if any) are easy to get TDD applied with. A neat approach is to extend your unit testing framework to takeover the basic steps of getting any controller/model ready for execution (e.g. I use a post() method as a shortcut to routing/dispatching/executing Zend Framework controllers).
As for whether application code is too dynamic to be tested - there's a huge difference between TDD (design the controller; tests are coincidental) and unit testing (test, test, test). Is application code too dynamic? It can be, but I think much of that tends to be present in heavy controllers where the logic has not been refactored into more stable library classes. In essence - it's a code smell.
To further press an argument - have you looked at how prevelant controller/model/view testing is for something like Ruby Rails? Python Django? Or perhaps more interesting - how each has committed test-execution frameworks to make simulating controller runs as simple as post(), is_redirect(), etc? I think it's more a symptom of PHP's current low adoption of TDD that the main PHP frameworks seriously lack any such toolkit - not that TDD or unit testing has no place in MVC.
None of this, of course, is an excuse for not having acceptance tests

. But not applying TDD to a controller, in my opinion, is just a throwback to pre-TDD practices and encouraged by frameworks like Zend which has, from experience, extremely little code developed using XP/Agile practices.