I agree that there's a sound reason for this, but I can't help but think that API versioning would be the more correct way to do it. This is how you pile up unnecessary complexity.
I'm not sure what you mean, because to me that's what they're already doing, where the API version maps to the OS version.
When compiling in XCode, you can select which OS version you're targeting, and that essentially gives you which API version you're targeting.
Does it matter to a user if the change was due to some “buggy apps”? If it works, it works.