I too was a fan of RobotLegs framework until I moved away from Flex after Adobe kicked it out their house to go live with the neighbors as a Spoon project. In light of that, I think you might appreciated Joel Hooks'
article on this subject. He too comes from a RobotLegs background.
Granted that his approach goes against some AngularJS recommendations, but it's not a bad approach.
Still, since I too am just learning AngularJS, I've always been of the opinion that it is not good to step outside a system until you have lived within it. Otherwise, you may never learn why things were done the way they were done. Once you gain mastery, then I think it's OK to experiment.
In light of that, I decided to go ahead and follow recommendations to store the model at $rootScope level, such as $rootScope.employees. The advantage of this is that, because every controller $scope inherits from $rootScope, you don't even have to inject it ($rootScope) into the controller. You can just inject $scope as normal, and then reference $scope.employees. The only caveat on that is, you can only read the $rootScope models in this manner. If you want a controller to write/update back to it, then you need to go ahead and inject $rootScope as well.
The thing I didn't like about this was that, if you want a factory/service to watch for a model change, you have to inject $rootScope. But, this seems to me a violation of its intent. As a scope object, which are designed to be binders between controller and view, they (and their ancestor $rootScope) seem terribly out of place inside a service because it then is too tightly bound insomuch that services should only provide reusable code, and not maintaining state, for the controllers. Nor should the services have knowledge of the controllers and their scopes. So, I opted to have the controllers act as brokers for any $rootScope model, which means controllers must pass any $rootScope model to the service function if the function requires it. And, I place my model watches at the controller level as well.
I'm actually liking how this is turning out as you can have model properties that are accessible to all controllers, and you can attach properties to the model that are only accessible at a specific child controller scope level. So, this goes to your example of storing state in the model without affecting the data. You can store the model data at $rootScope level and access it as such in each controller. but your child controller scope could append a selectedItem or selectedIndex property that only that child controller "sees". This means multiple controllers can use the same model data, but each can store their own view state properties that don't get propagated back up to $rootScope.
I know this is going long. Sorry. So, finally, by way of example, a controller's reference to $scope.employees is a reference to $rootScope.employees and all employees in the list (assuming some other controller previously called a service function to get the list and then the controller saved it to $rootScope.employees). But, the controller could also read/write to $scope.employees.selectedItem and that 'selectedItem' property that is associated with the employees model is only visible at the child controller level. You haven't corrupted the model for other controllers.