My friend Greg Henselman has some really nice intuition about the chain rule. He put it on facebook and this is the thing reposted with some mild modifications. It was initially a reply to a student who didn't quite seem to get the chain rule. Anyway I thought this explanation was freaking awesome. In fact I wish someone had taken me aside when I was learning calculus and given me this or something like it. I spent a couple of years thinking of the chain rule as a formal thing rather than having anything remotely resembling intuition for it. When I got to the multivariate version I was even more confused. Anyway this explanation would have saved me a few years worth of grief, so if you ever need to explain the chain rule to someone please give them this or something like it.
Anyway without further adieu here is Greg's post.
Suppose a fishing boat has been hired to catch the fish and chop them into edible pieces for bigger fish being grown in a nearby lake. It enters from the West and travels East. If the boat's distance from the West end of the canal at time t is denoted f(t), then the boat's velocity at time t is f'(t).
Assuming the boat catches every fish it passes over, and that the unfortunate fish never get wise and swim East, then the total number of fish in the boat's chum barrels at time t is exactly the number of fish who lived Westward of the position of the boat at time t. We can write this as g(f(t)) = (g \circ f)(t).
What is the rate at which fish are being caught at time t? Without using any calculus at all you can probably see that it is the boat's velocity times the number of fish living directly below it at time t. The velocity at time t is f'(t), and since the boat's position at t is f(t), the number of fish living directly below it is g'(f(t)).
Putting these pieces together, and remembering that the rate at which fish are caught is the rate of change of (g \circ f)(t), i.e.(g \circ f)'(t), we see
\[(g \circ f)'(t) = f'(t)g'(f(t)), \]
which is exactly the Chain Rule!