I have the impression that many peoples sight on web development is somehow obscured by objects. If instead you think of http requests as functions things are straight forward and easily understandable.
What I would really like to have is an enviroment for web development that at least forces developers to specify all request parameters in one place. A better one should also force validation. I have not seen one yet. So the thing one really should do is at least document the parameters.
The dominant problem is communication through globals, which will start haunting you as soon as you have some kind of session object at hand. This will not get better if you use get and set functions to access them. In fact I wonder why this kind of brain dead repetitive coding is considered good practice at all. A good language should provide a way to automate this.
It would be a good thing if there was a mechanism like statics to scope those session globals.
Another good thing is a mechanism to pass parameters by reference. This can be achieved by using data structures that are persistent and can be retrieved via an id.
The notions of GET and POST can also easily be translated to function semantics. GET requests should not have side effects while POSTs may.
There is in fact one thing of importance that can not be described that way. Redirects are really useful but do not have an equivalent mechanism in the world of function calls.
There are only URLs and http requests for the resources they identify. There is no technical way to group them into applications. Applications do exist in the users mind, who identifies them through page layout. They are in the managers mind, who identifies them by budget. In the developers mind they are harmful.
If the developer thinks in terms of applictions he has given up the fine granular modularity he could have by building request handlers. Unfortunately most enviromnts encourage this.
If the developer is building request handlers (e.g. scripts on a mod_perl Apache) the change/test cycle consists of changing the code, pressing reload and looking into the server log or at the browser to check the results. A developer doing an application usually can not simply press reload. He has to restart the application, he has to log in and he has to click his way towards the page he wants to test. This slows down his work enormously.