Error handling in SQL Server can be complex.
In the case you have, the Query Optimizer attempts to create a query plan when you execute the procedure. If it suceeds in creating the plan, it then executes it. But if it cannot create the plan, then it never executes your procedure. So it never gets to then BEGIN TRY/CATCH code.
Erland Summarskog has an excellent series of blogs on error handling you can access at http://www.sommarskog.se/error_handling/Part1.html. It is well worth reading and understanding the entire blog. But if you want to see how to handle this type of error (a misspelled object name in a stored procedure) go to
http://www.sommarskog.se/error_handling/Part2.html#compilationerrors and scroll down to the heading "Binding Errors".
Tom