When you compile one language to another, you'll often* need some intermediate representation. It could be as simple as parse trees or a more potent one like a stack machine or infinite register machine. You can modify this intermediate form for example to achieve various optimizations, and then translate it to the output language.
Another reason, specifically for this course is, that it provides a meaningful way to break up this rather large task (writing a compiler) to 4 smaller tasks.
For additional reasons, check out this thread:
http://nand2tetris-questions-and-answers-forum.32033.n3.nabble.com/What-does-quot-virtual-machine-quot-and-quot-real-platform-quot-mean-td4028959.html----
* Unless the two languages are really close to each other.