You don't need to use $A.getCallback() if your code is executed as part of the framework's call stack; for example, your code is handling an event or in the callback for a server-side controller action.
An example of where you need to use $A.getCallback() is calling window.setTimeout() in an event handler to execute some logic after a time delay. This puts your code outside the framework's call stack.
This sample sets the visible attribute on a component to true after a five-second delay.
window.setTimeout( $A.getCallback(function() { cmp.set("v.visible", true); }), 5000 );
Note how the code updating a component attribute is wrapped in $A.getCallback(), which ensures that the framework rerenders the modified component.