Как использовать $scope вне контроллера?
Заведите себе какой-нибудь сервис, например Page, в котором будет лежать вся информация, относящаяся к странице в общем, такая как текущий пункт меню,  title и тд.app.service('Page', [function () {
  var Page = this;
}]);
Внутри app.run просто  поместите этот сервис в $rootScope:app.run(['$rootScope', 'Page', function ($rootScope, Page) {
  $rootScope.Page = Page;
}])
Теперь просто заинжектите этот сервис в любой контроллер и устанавливайте ему все что душе угодно.app.controller('MyCtrl', ['$scope', 'Page', function ($scope, Page) {
  Page.myVar = 'lol';
}])
В ангуляровском шаблонизаторе будет доступно как {{Page.myVar}} или более строго {{$root.Page.myVar}}
У подхода предложенного Павел Кононенко есть свои плюсы (просто), и минусы (логика из view layer чуть чуть вытекла в контроллер). Что бы этого не происходило можно сделать это дело при помощи старых добрых директив и выставлять заголовки и метатеги через них во вьюшках. Далее уже есть варианты:
 - в директивах ловить метаданные и сэтить их через сервис, метаданные выводит отдельная директива
 - передавать данные напрямую в директиву отвечающую за вывод метатегов (директивы могут общаться).