ok, firstly, thanks to ScarletGarden for making it clear what the problem was, i had assumed as much but its nice when someone confirms your suspicions.
Secondly, apologies to those who see this as some sort of n00b question and find the whole premise of this question stupid, i really couldnt find any articles clarifying this specific problem...
Thirdly, i have now worked out how to do this in Javascript (although scarlet gardens solution is a lot simpler in pretty much every case) although the attributes.add approach (as scarletGarden suggested) may suffer if you had multiple handlers and needed them to fire in some sort of sequence.
Having had a little dig in reflector, Attributes.Add adds event references by semi colon separating them, so this clearly works as it preserves any handlers that are already declared and semi-colon separates the one(s) you add.
In javascript this kind of chaining (multicasting of a sort) requires that DOM level 2 functionality is used (the javascript bible was useful for identifying this), it should be no surprise that Mozilla and IE have a different way of achieving the same thing and so, in order to add a js handler and preserve the event handling in codebehind, the line in my example above that says
ctrls[i].onchange = selection_handler; \r\n
needs to be replaced by the following (before people get precious about this example i do have a big caveat for this, further down)
sb.Append(" if (ctrls[i].addEventListener) ctrls[i].addEventListener(\"change\",selection_handler,false);");
sb.Append(" else if (ctrls[i].attachEvent) ctrls[i].attachEvent(\"on\" + \"change\", selection_handler, false);");
sb.Append(" else return false;");
attachEvent works in IE, addEventListener in Firefox (note the different names for the events, Mozilla preferring to drop the "on"
Adding events like this works in a LIFO (last in First Out) manner, there are many alternatives to sequencing events in this manner using more elaborate javascript, covered in an excellent, if slightly confusing thread (because of the way it starts) here http://codingforums.com/showthread.php?t=154673
I hope this stuff enlightens others as much as me, this is the thread i was looking for when i first hit the problem and now i feel a bit stupid, but hey ho