What everyone has written basically summarizes what a "leak" is (at least with respect to war3 mapmaking).
I would say that the cause of all leaks when making a map is human error. From my readings Blizzard did not implement automatic memory management, so it is up to the coder to know when an object is no longer needed. Leaks come about when the human writing the code failed to deallocate memory for some object, which now takes up space but is serving no useful purpose at all. Over time, especially in functions that get re-used (basically any procedure that your map re-uses always), the leaks build up and take up memory. As the available memory gets smaller, you'll probably notice performance decreases (possibly because the hard drive is being used to store the additional memory, which is thousands of times slower, though I don't know the internals of warcraft 3 memory management).
However, just because a map gets "laggy" does not necessarily mean there are any leaks. If you are doing some intensive computations or functions that require a lot of space, then during those calls you'll inevitably notice a slowdown. But after that computation is performed, things should return to an acceptable FPS.
Leaks on the other hand will never go away, and if you accumulate enough of them the map can become unplayable.
So basically whoever wrote the script forgot to destroy a handle they no longer need (usually a local variable whose type is not a real, integer, boolean, etc.). The tricky part is it's not immediate obvious that a leak exists (you could have a 30 minute game and no noticeable FPS drop, but then suppose a game drags out to 60 minutes, and bam you suddenly notice a FPS drop).
I think there some instances where leaks exist but cannot be addressed by the coder (these would be inherent faults with the JASS, which is ultimately the fault of some human at Blizzard), though I don't know of any objects in JASS or situations which a leak is guaranteed and can't have its memory freed (I could be wrong).