Oi Davi,
Aqui no meu PHP 5.4 (beta) o refcount deu diferente, e conforme era previsto:
object(stdClass)#1 (1) refcount(4){
["valor"]=>
long(10) refcount(1)
}
object(stdClass)#4 (1) refcount(1){
["valor"]=>
long(10) refcount(1)
}
$a teve 4 referências, enquanto $a2 teve apenas uma. Talvez você olhou errado o refcount do atributo "valor" destes objetos.
Imagine a situação: você tem um objeto $b e passa ele por parâmetro de uma função que insere o elemento na árvore $a. Após inserir o elemento na árvore, suponha que você modifique o valor de alguma coisa em $b. Queremos que isso já propague a mudança para a árvore também. Para isso ocorrer, não precisaria usar a referência do parâmetro da função (como você mesmo disse, objetos são passados por referência), mas para apontar um nó da árvore para o novo nó, precisa usar a referência.
Sei que o new devolve a referência, mas neste caso não é no momento do new que estamos ligando um nó ao outro. Veja a linha:
$b->node = $a;
Neste momento não está sendo chamado o construtor, logo o objeto não é passado por referência se não utilizar =&.