appendChild перемещает элемент, а не создает новый, поэтому все обработчики и атрибуты никуда не пропадают, элемент-то все тот же, просто на новом месте. Демонстрация:
<style>
.label {clear: both; font-family: Verdana; font-size: 12px;}
#test {width: 15px; height: 15px; background-color: darkseagreen; border: 1px #444 solid;}
.cont {width: 50px; height: 50px; border: 1px #555 solid; margin: 10px 10px 0 0; float: left; padding: 5px;}
.cont1 {background-color: #ddd;}
.cont2 {background-color: #ddd;}
</style>
<div class="label">Click on the green square.</div>
<div id="cont1" class="cont cont1">
<div id="test" title="Click me!"></div>
</div>
<div id="cont2" class="cont cont2"></div>
<script>
document.getElementById('test').addEventListener('click', function() {
var newParent = this.parentNode.id == 'cont1' ? 'cont2' : 'cont1';
document.getElementById(newParent).appendChild(this);
}, false);
</script>