I can see both sides of the coin. It would make sense if the only way to depend on an instances hidden values was through its public interface. That way, each object is a truly independent actor, specified by and only by its public interface. You and me both belong to the general class of humans, but you still have to ask me if you want to borrow my money.
I desperately need better nomenclature, but it is essentially what I think of as "implementation hiding for security and reliability reasons". You specify a small-ish set of methods that depend on the internal state of only this object, you verify their goodness, and then calmly implement all other operations in terms of those.
Then Java is based on "implementation hiding for maintainability reasons" -- i.e. it's really important that if you refactor something private in a file, your commit should only have to mention that file, and no other file can depend on private members in other files.
In this case, the "reliabiliy" perspective confers greater maintainability, at least in one dimension. On the other hand, much lower flexibility, as several people have mentioned already.
In some loose sense, it's the distinction between a syntactic perspective (boundary crossing happens at the file level; the characters on screen determine what implementation hiding means) and a semantic perspective (the objects should occupy an utopia where they do not distinguish between each other based on class, if you excuse the pun. What matters is their allowed behaviour and that interaction.)
I am afraid I have failed to express this in neutral terms because of my preexisting biases, but I hope the idea comes across anyway.