The simplest explanation would be a significant change to a portion of code without altering the external behavior (the interface or the result). It's the cornerstone of a number of different development methodologies, notably agile development.
Generally the objective is to correct design flaws, improve readability, improve code re-use and an overall simplification. On the
extreme end of agile software development you basically hack together code to do what you want, then refactor, then hack together more code based on shifting requirements, refactor, refactor, refactor, and refactor again until you end up with something elegant and effective. I argue that agile methods are just as effective as document-based methologies as long as you obey the principles of code-as-documentation and have solid self-documentation support in the IDE.