Причина в том, что иногда вы хотите передать и другой аргумент, например, такой:
<directive ng-repeat="item in items" on-smth="dosmth($a, item)"></directive>
Внутренняя директива (и обязательная):
scope.onSmth({ $a: internalVariable })
Как бы вы сделали это с <связыванием? </p>
scope.onSmth(internalVariable)
И в шаблоне:
<directive ng-repeat="item in items" on-smth="dosmth"></directive>
Здесь нельзя передать дополнительный параметр item
.