Cómo acceder / actualizar $ rootScope desde fuera de Angular

Mi aplicación inicializa un gráfico de objeto en $ rootScope, como este ...

var myApp = angular.module('myApp', []);

myApp.run(function ($rootScope) {
    $rootScope.myObject = { value: 1 };
});

... y luego consume datos de ese gráfico de objeto (solo enlace unidireccional), como este ...

<p>The value is: {{myObject.value}}</p>

Esto funciona bien, pero si posteriormente (después de que se haya completado el procesamiento de la página) intente actualizar $ rootScope y reemplazar el objeto original por uno nuevo, se ignorará. Inicialmente supuse que esto se debía a que AngularJS mantiene una referencia al objeto original, aunque lo haya reemplazado.

Sin embargo, si envuelvo el HTML consumidor en un controlador, puedo actualizar repetidamente su alcance de la manera prevista y las modificaciones se reflejan correctamente en la página.

myApp.controller('MyController', function ($scope, $timeout) {
    $scope.myObject = { value: 3 };

    $timeout(function() {
        $scope.myObject = { value: 4 };

        $timeout(function () {
            $scope.myObject = { value: 5 };
        }, 1000);
    }, 1000);
});

¿Hay alguna manera de lograr esto a través de $ rootScope, o solo se puede hacer dentro de un controlador? Además, ¿hay un patrón más recomendado para implementar tales operaciones? Específicamente, necesito una forma de reemplazar gráficos de objetos completos que AngularJS consume fuera del código de AngularJS.

Gracias de antemano por sus sugerencias, Tim.

Editar: como se sugiere en los comentarios, he intentado ejecutar el cambio dentro de $ apply, pero no ayuda:

setTimeout(function() {
    var injector = angular.injector(["ng", "myApp"]);
    var rootScope = injector.get("$rootScope");

    rootScope.$apply(function () {
        rootScope.myObject = { value: 6 };
    });

    console.log("rootScope updated");
}, 5000);

Respuestas a la pregunta(3)

Su respuesta a la pregunta