Olá Anderson,
Passar objetos para outras classes é apenas uma possibilidade que a linguagem dá, e é uma parte importante da Orientação a Objetos, um objeto é um variável e sendo assim você pode passar essa variável para uma função ou para uma classe como qualquer outra variável.
Na estilo Orientado a Objetos é muito comum você trabalhar com vários objetos dentro e fora de várias classes diferentes, criar relações entre classes e ter o atributo de uma classe sendo o objeto de outra classe, como no seu exemplo acima.
Sobre a utilização do Usuario
antes da variável na função cadastrar, isso é uma forma de garantir o tipo de uma variável. Servindo para reforçar uma regra no seu código, e também deixar o código mais claro, apenas olhando você percebe logo que deve passar um objeto da classe Usuario
e não um número ou texto quando utilizar a função cadastrar.
Isso ajuda principalmente a evitar bugs no seu código, além de facilitar para você deixando visível que a função cadastrar precisa desse tipo exato de variável para funcionar corretamente, a maioria dos editores de código já avisam caso você passe um tipo diferente, e caso o PHP não consiga transformar o valor para o tipo definido vai acontecer um erro na execução.
Exemplo:
<?php
class Carro {}
class Moto {}
function cadastra(Carro $carro) {
echo 'Cadastrando o carro';
}
// Retorna um erro
cadastra(1);
// Retorna um erro
$moto = new Moto();
cadastra($moto);
Resultado do código exemplo:
PHP Fatal error: Uncaught TypeError: Argument 1 passed to cadastra() must be an instance of Carro, integer given