вам нужно реализовать директиву, которая будет отвечать за drag'n'drop объектов, и внутри организовать калбэки, которые можно задавать через scope. (например что-то типа on-drop). Для удобства настройки можно сделать несколько директив, и одну главную (читать про require).
Работать с элементами можно только в директивах, но директивы не должны ничего знать о вашей бизнес логике. То есть если у вас появляются конструкции вида angular.element(garage).scope() то это повод задуматься.
Должно получиться что-то такое:
<ul>
<li data-ng-repeat="car in Model.cars" data-draggable="car" data-draggable-item="car">{{car.modelName}}</li>
</ul>
<ul>
<li data-ng-repeat="garage in Model.garages" data-droppable="car" data-on-drop="doSomething">{{garage.name}}</li>
</ul>
атрибуты data-draggable и data-droppable будут отмечены тегами, что бы указать какие объекты можно тягать куда. Для вашей задачи можно и без этого.
// controller
$scope.doSomething = function (car, garage) {
// ставим машинку в гараж, убираем ее из списка если хотим, или что-то еще...
// контроллер в этом случае вообще ничего не знает о drag n drop,
// только о том что что-то нужно сделать с данными.
};