By not "advertising" the _fields in the documentation, the only way the users can discover them is by looking at the source code.
Or by using an IDE that doesn't suck. And even if there were a fully-working public/private system there would be nothing to stop them from simply changing the field type.
Sure. But I'm thinking people are going to reckon it's private for a reason, were as a leading underscore is completely ambiguous (and may obtain a double meaning if you're already using it for something else [like for instance globals, constants or enumerators]).