Basically when you use the native javascript 'element.addEventListener(...)' method, it doesn't overwrite the older event handler, but simply adds another one. This is also the method that $addHandler(...)
uses internally.
Check out the explanation for the W3C event registration model given here.
With this basic information, we can look at the code that you have mentioned:
Departments.Attributes.Add("onblur", "department_jsblur();");
is server side code that is used to create the html. It uses the traditional way of adding event handler resulting in HTML like <textbox onblur='department_jsblur();' />
The $addHandler(departments, "blur", departments_onblur);
is the javascript that is executed once the html has been rendered in the browser window and the traditional event handler has been attached. It uses the element.addEventListener('eventType', callbackMethod)
API provided by the language to add additional handlers.
Internally, the multiple handlers assigned to an element are stored in an array, and when the event is raised, all the handlers are executed one after the other.