Say you have an app, Foo. It's a reduced-function version and you want your users to buy Foo Pro. In order to use in-app purchases as an upgrade mechanism, you now have a bunch of customers running with Foo, except with Foo Pro functions unlocked. And you also have a bunch of customers running around with just Foo Pro.
The second part of this mess is that, unlike app purchases, users cannot see which in-app purchases they already own. If they ever get a new device, reinstall the app, etc etc, they have to "buy" the in-app purchase again to unlock the Pro version, and pray they don't get double-charged (it happens). As an app developer this is a support nightmare scenario.
This is not to mention that some users will mistakenly purchase the Pro version (and thus get double charged) when they get a new device, instead of downloading the regular version and "re-buying" the in-app purchase.