The main reason being to allow QueryBuilder to be subclassed — for example so that we can fix issues like problematic shallow cloning locally and use them without having to wait for a pull request to be merged.
Changed property visibility to protected
Changing the visibility of all these properties means that they become extension points for which we then must provide BC until 3.0 according to our guidelines. So IMO, it is a -1 here.
@barnabywalters the QueryBuilder is already very complex - as @stof said, you're also locking it from being changed internally, and that's problematic right now, since internal refactorings can happen quite often because of its complexity.
Understood, thanks for the explanations :)