Why are variables in UnityEngine.UI private instead of protected?

My problem: I want to extend UI, but can’t inherit from classes in UnityEngine.UI because all of them have private variables and many don’t have protected or public getter (not to mention setter).

One example: simple fix to GraphicRaycaster can make it 4 times faster in common situation, but I can’t simply override one or 2 methods, because I can’t use variables from GraphicRaycaster, because they are private.
In this case there are only two, but in other (try to extend Selectable) is worse.

Is it “working as intended”?

I think the “why” is not really important here. You should file an issue on the issue tracker if you think opening the access up is a good idea, preferably while mentioning a use case.