Different syntax to add/substract interval
My guess(!) is: 

The + operator for timestamps only supports adding an interval (timestamp + interval). And thus it's clear that the string value '5 year' needs to be (implicitly) converted to an interval 

The - operator on the other hand supports two different combinations: 


timestamp - timestamp 
timestamp - interval.


Apparently Postgres prefers to use the timestamp - timestamp option and tries to (implicitly) convert '5 year' to a timestamp which of course fails.