I am not sure if this will be of any help. But you could actually globally override $watch - without it feeling like a hack. Angular does provide a mechanism to do that. Since $rootScope is a service, you can have a decorator for it where you can override the $watch which will override the $watch for all scopes.
Angular Batarang overrides $watch too for instrumentation.
Consider this one more request for publishing your directives and changes :)