This question took me a while to answer because I don't want to draw a counterproductive distinction between the two. In testing we already have a lot of distinctions between terms that don't necessarily help us do better testing. If you do a Google search on the question, you'll see a lot of different answers to the question, but few of those answers offer the reader any real actionable difference.
When I think about regression testing, I think about any testing that involves the reuse of tests (manual or automated) or test ideas (regression charters for example -- a regression test does not necessarily need to be the exact same test) to manage the risks of change. This could include testing for bug fixes, testing to make sure a bug fix didn't break something else, or testing to make the introduction of new or changed features didn't break something else.
If you think about regression testing in that broad sense, then retesting is most likely a subset of that definition. It's a test that you're repeating for some reason or another; so I would call it a regression test. The only place I can't think of where I would use the two terms interchangeably is when talking about a specific defect. I probably wouldn't say "I'm regression testing defect X." I'd say "I'm retesting defect X." But it's semantics more then anything. That retesting is still regression testing.
It's worth noting, the best summary I've seen for reasons why one may want to repeat is James Bach's article Reasons to Repeat Tests. The reasons for repeating a test that James articulates in the article can be helpful in testing your motives for why you want to run the regression testing. It's an actionable list of distinctions. I can use it to add clarity to my thinking about my testing. I can't do that with the simple distinction of retesting vs. regression testing.
This was first published in March 2008