Speaking as a former Windows developer
I'll take a stab at this. The development model that Windows GUI developers use is one with fairly unrestricted disk access. The only restriction is placed on traditional user roles. So if the app. is run in a user account, they're restricted to the user's directories. If they're run as Admin, they have pretty much unrestricted access. Most GUI apps. are run in a single thread, with an event model, with some multi-threading for CPU/network-intensive stuff. Asynchronous execution is an add-on, not a main feature.
Even when it comes to web apps., they typically operate like a transaction system, where there's a call to a function on the server, and the client waits for the response. The server generates some content/data and sends it back to the client. Often web apps. have fairly unrestricted disk access on the server as well. Again, the app. often runs in a single thread within a session.
So having restricted disk access and running asynchronous code as a normal part of the application structure is an adjustment for developers used to a tree directory structure, and synchronous code execution. The touch interface is an adjustment as well, since it's not convenient to manipulate small items on the screen. You can't use menus and small icons. You need interactive elements that can be manipulated more, or at least that can just be pressed. The interface has to be simpler. Complex apps. need a redesign of the UI.
Developers have been able to write apps. for the iPhone since about 2008, so they've had a head start.