All 'live' scope variables/functions get 'dirty checked' during the digest cycle.
A scope variable doesnt have to be interpolated into the view to be useful. Some other directive can use scope inheritance to access this scope variable or something can $watch this scope variable and then respond to the changes.
The only way to get scope to not be dirty check is to destroy it by placing it behind ng-if, ng-switch or by explicitly deleting. it.