In short, and probably oversimplifying a bit: It is used instead of id for browsers that don’t understand document.getElementById.
These days it serves no real purpose. It is a legacy from the early days of the browser wars before the use of name to describe how to send control values when a form is submitted and id to identify an element within the page was settled.