Emacs also lets you stay immersed in all aspects of your project at once. However, unlike a GUI, using different panes in Emacs is uniform: the commands you use to get around the file/tree view are the same commands you use to get around your code are the same commands you use to get around your compiler output.
Emacs also provides some really nice technology for finding commands including ido-mode and C-h m (which lists commands for the current mode and is incredibly useful). However, here the real magic is that getting around a help buffer is again the same as navigating code--you can use the same command to search and the same commands to move around.
Emacs also has a nice system for integrating arbitrary output from an external process into your code, letting you have error highlighting and static analysis for arbitrary languages. On top of this, it has several really nice modes like js-2 and SLIME that create an even more compelling experience for certain languages.
On top of this, Emacs has a bunch of really nice features like TRAMP which lets you visit arbitrary remote files and even open remote shells trivially. On top of this, it is much easier to extend than any IDE or even any other editor I have ever seen.
So really, Emacs can provide everything you want, it can provide it in a much more consistent UI and it is infinitely configurable.