First of all, you might ask questions such as these: why don't we just alter the source code of AndEngine if it will suit our needs better that way? Why not just modify its OpenGL renderer to directly render 3D models instead of bolting on a secondary renderer as we did? Why not implement an OpenSL ES or OpenAL audio API straight into the AndEngine framework?
The simple answer to these basic questions is that by doing so, we lose the ability to keep up with AndEngine updates. In essence, by changing even a single line in AndEngine's source code, we would forever be doomed to backport changes from the AndEngine project into what would amount to our own private fork of the code.
By keeping our additions and changes as external extensions that expand on and make use of AndEngine APIs and classes but never alter them, we can keep using the main AndEngine source. The only thing we may have to do occasionally is update our code to reflect the changes in the AndEngine...