We’ve been living in a social world for years. But iCloud syncing is not social: it’s per-user syncing.
If you write your own server, you can write the social bits, so your users can share recipes, weather forecasts (look, Mom, it’s going to be sunny on Thursday!), favorite articles, or whatever-it-is your app does.
He offers another great reason, which is iCloud's inability to interact with server-side services:
iCloud can’t poll Twitter to see if your follower count has gone up or down. iCloud can’t generate weather forecasts. iCloud can’t track ships.
There are all kinds of services that make sense on the server side. You could do some of them on a client, but at the expense of timeliness and battery life. If it’s a good idea, and you don’t do it on a server, your competition just has to write a server that does it, and your app is finished.
Even if you wanted to write your own server and then integrate with iCloud for syncing, it's impossible. There's no API that would allow a server to connect to iCloud.
At this point, implementation problems are by far the biggest obstacle to iCloud adoption. But once those are solved, the limitations designed into the platform will still be a big barrier.