There are several reasons. The code will work, but it is best practice to not reference the ObjectManager class directly.
Because we say so! ;-) (better expressed as consistent code is good code)
The code could by used with a different dependency injection framework in the future
Testing is easier - you pass in mock arguments for the required class, without having to provide a mock ObjectManager
It keeps dependencies clearer - it is obvious what the code depends on via constructor list, rather than having dependencies hidden in the middle of the code
It encourages programmers to think about concepts like encapsulation and modularization better - if the constructor gets big, maybe it is a sign the code needs refactoring
I would also suggest reading up on dependency injection. There are lots of tutorials around on the concept. Here are a few I found pretty quickly, with Martin Fowler's description being definitely worth a read.