Transform is added to game object in the constructor and is not expected to ever leave or be swapped. But you bring up a good point. Renderer *might* be swapped in run time. However, the way you are caching renderer wouldn't work in that case. 
Our options would be to:
1. Not cache the renderer in game script and access it via Get Component
2. Cache it in game script, but every time a component is added or removed from the object, raise an event to update cached references in game script
I would be in favor of 1 because I don't see anyone wanting to access renderer all that often (or at all) in the first place. But having the mechanism (basically just an event fired) for 2 would be nice to have even if we don't act on it right now.