I've done a little work with iPhone app development. I'm an avid user of a wide array of other iPhone apps. Apple provides a pretty standard set of UI widgets. There's some variation; the slider control looks different depending on where it's used, for example. Those variations are largely cosmetic.
If you want to have tabs in your application, there's a built-in tab control. It rests at the bottom of the screen as a set of buttons. Every app that wants to have tabbed screens will use the same widget and the same family of controller classes to do that. Someone could write their own, but it'd be a lot of work when Apple provides a good one already. It would also break the general look and feel- an app that didn't use the standard widgets wouldn't feel like an iPhone app anymore. Inconsistency is not user-friendly and a potential source of confusion.
As a general rule, every app should look more or less the same. We generally rely on the operating system to enforce that. It provides a library of controls and developers just drag and drop. The result is that, unless you go out of your way to be special, every application looks mostly the same as every other application. This gives operating systems a distinctive, recognizable appearance, and it helps minimize the learning curve on new applications.
This is a general rule. There are certain cases in which an application's functionality doesn't fit well in the established paradigm. Adobe products have always used the UI that works for their problem domain, and they've been very successful with that. I'm not trying to argue that every app should look the same, but they shouldn't be different just for the sake of being different either.
The iPhone OS goes a long way to forcing a consistent look and feel on applications, but apparently Android does not. Compare this with this. The "cab4me" app uses a tab control that looks more like a desktop app's control, while Ecorio looks more like the iPhone's approach. Then Locale does the more-like-a-desktop-app thing, but manages to look nothing like Cab4Me's approach.
If you browse through those screenshots, you'll see the same standard problem— a multi-tab interface— solved half a dozen different ways. None of them look alike. The position of the tabs tends towards the top of the screen, but the size of the click area varies. The chrome varies.
The sad reality is that no two of those apps look like they're running on the same platform. Everyone's come up with a new and novel way of solving the same problem. There's not even a consistent color scheme- something that most desktop OSes enforce, and something that carries accessibility concerns.
And that's a weakness of Open Source tools, operating systems and software. It cuts both ways; with no central authority behind the architecture, innovation proliferates at the expense of consistency. As weaknesses go, it's not too bad. It's something that could be addressed.
The big down side is that inconsistency is a Bad Thing when you're trying to promote user adoption. It hurts the Linux desktop, which already looks more consistent than this. I think that it's going to hurt the Linux smartphone.
The iPhone has a lot of weaknesses (being ruled as Apple's private little domain is not a good thing), but it certainly offers consistency. Everything looks like an "iPhone App", and is immediately recognizable as such, promoting usability, user adoption, and branding.