Is there a binary search tree datastructure which can avoid becoming badly weight-balanced?
Yes, I believe there is (though I don't remember the details of the paper to confirm).

This is the original paper which dealt with that:


  Nievergelt J. and Reingold E.M., "Binary search trees of bounded
  balance", Proceedings of the fourth annual ACM symposium on Theory of
  computing, pp 137--142, 1972


Here is a page on weight-balanced trees which seems to have some more information and mentions their usage in functional languages.

This paper: On Average number of rebalanced operations in weight balanced trees, seems to be investigating the number of rebalancing operations in weight balanced trees.

I also seem to remember that one Knuth's Art of ... books had a reference to the above Reingold paper (perhaps in the exercises).