Hadoop supports Jar-in-jars (i.e. jar files in the lib folder in the jar file - mouthful isn't it!). None of the current Java versions support jar-in-jar (i think 8 is rumored to support this, at least i think i've read some grumblings about this, but certainly don't quote me on that), and this is how Hadoop achieves this.
Why would you want to do jar-in-jar when you could just created an uber-jar? Build time could be a reason (unpacking and repacking huge depedant jars could add seconds or even minutes to your build time). I'm sure there are more, but for me i think the resultant jar is 'cleaner' - personal preference i guess.