That's a good point, it would be restrictive in the case you mentioned above.
What do you think about marking the classes that are obviously public as such (HCatLoader, HCatInputFormat, ...) and leaving others unmarked, implying they're private. This would allow us to get some experience evolving interfaces consistent with the stability contract, without having to figure out the corner cases. As we gain experience hopefully we learn how to deal with corner cases like you mentioned above. For example, maybe just the experimental method is marked as such. I just checked Hive and found an example where just a single method is annotated suggesting we could go that route too.
I think the high-level goal of these annotations is to let users know what's safe to use. If we start small and build from there I think we'll end up giving some pretty good guidance.