I was looking for the same thing and now after few hours finally it works:
You can use the $controller - service, but as you noticed, you need to create the scope on your own:
$controller('InnerCtrl', { $scope: $scope.$new() } );
Don't worry, all the other variables will be injected properly, but Angular isn't able to create the new scope on it's own. If you want to add the controller inside your HTML, it's a bit more complicated, you need to have a function in $scope which exposes the constructor of the controller:
$scope.InnerCtrl = function() {
return $controller('InnerCtrl', { $scope: $scope.$new() }).constructor;
}
In HTML you can afterwards use it as always: <ANY ng-controller="InnerCtrl"></ANY>
I wrote a post about it with some additional details, but this is the main to solve the problem for you.