the process of changing your software so that it isn't hardwired to one language/locale/culture.
the process of adding the appropriate resources to your software so that a particular language/locale is supported. It's bigger in scope than just this Wikipedia entry, but it's a good start.
The value of distinguishing between them is that (theoretically) once your program goes through the i18n process, you can then iterate many l10n processes as you need them; also, it's nice to be precise with language.
Some other reasons to think of them separately: Internationalization QA and localization QA have different test cases, Internationalization is a one-time cost (more or less), and so the more languages you localize to, the higher your ROI. i18n is generally more costly than l10n to any one locale