In the ways they overlap, you can think of it like this:
"Hold" means to possess something, literally or figuratively, for a limited time.
"Keep" means to possess something, literally or figuratively, for a longer, maybe unlimited time.
So I might "hold on to my car keys" but "keep my car at home." I might "hold on to a dollar bill" but "keep my dollars in a bank."
This isn't a perfect explanation, but seems like a good general guideline.