Looking at the code it seems that transformResponse has to work synchronously. This is because the function receives the data and headers, and must return the data (presumably after transforming it). You can't do anything that requires a callback because you have to return the data, and not a promise.
The responseInterceptors, however, are based on defers/promises. The interceptor itself should return promise.then(....) and since the handlers in the then() call can return either the data to pass along, or a new promise for that data, you are free to perform actions that require callbacks.
I could be wrong, or misreading it. It seems like transformResponse is simpler but lacks the ability to use async code, but response interceptors are more powerful, at the expense of simplicity.