Most importantly, it exposes assumptions. Yesterday there was the post about hand-crafting beating the compiler where the compiler made assumptions that weren't true. Every solution incorporates assumptions, which may prove false or simply age poorly. When you re-invent the wheel, you get to re-examine those assumptions.