delay_ms() uses timer0. If you do not properly set up timer 0, delay_ms will look like it never returns. The error you get from trying to call timer0Init and timer2Init seem to be the root problem (as it looks like you guessed already).
The unrecognized symbol error is caused by the compiler not being able to find the function in any of the source files it is compiling (in reality it's looking in all the object files) or in any of the libraries it is linking against. If I remember correctly, those functions are in timer640.[ch].
You should make sure you include the proper header files, your Makefile has the proper source files in it, and the files are in the same working directory as your project. There can be other causes of the error as well, but these are the most common.
I hope that helps.