Prueba asi y me dices que tal:
Código PHP:
class prueba{
private $varPrueba;
public function Mostrar() {return $this->varPrueba; }
}
$objeto = new prueba()
$objeto->varPrueba = "hola";
$objeto->Mostrar();
Cuando te refieres a un miembro de alguna clase no debes de usar mas $ en el nombre de la variable, porque ya usando $this estas creando, lo que pasa en tu ejemplo es que al usar $this->$varPrueba estas creando otra variable que se llama $varPrueba y como no esta definida, por defecto se vuelve publica y es por eso que la puedes mostrar.
Saludos.