A documented API is considered by Apple to be like a contract. By documenting it, they are promising that they will try their hardest not to change it in any incompatible way in the future, and any deviation from this would be considered a bug (and, depending on the impact, a showstopper).
There are lots of reasons why an undocumented API may remain in that state. Often it’s because the API as it currently exists only works properly in a limited subset of the scenarios which the parameters suggest it might. Or it might be that it’s a poor fit with the rest of the API in a given area. Or it’s because the developers intend to change it in the not hugely distant future.
Apple regularly opens up its private APIs once they release maturity if there’s a solid case for doing so, and did precisely this when Snow Leopard was released (Quick Look, for example, moved from PrivateFrameworks to being part of QuartzCore with the arrival of 10.6).
As the old adage goes… don’t make a promise you can’t keep.