причём -> перегрузить можно, что бывает удобно, но зачем вводить ещё и :: мне вот не совсем понятно
Это достаточно чёткое разделение типа, объекта и указателя. За счёт этого нет типично питоновских проблем «здесь модифицируем, а тут нет» и явовских- чем отличаются два целых типа.