| 
		
			Сообщение от sanambler
			
		
	 | 
	
		li.innerHTML += '' + 
              '<b>' + key + ':' + '</b>' 
          ;
	 | 
	
Вот тут ты перезаписываешь свойство innerHTML. Твой старый <span> таким образом исчезает из <li>, затем браузер парсит новый innerHTML и создает новый <span>, но это уже другой элемент.
Варианты решения:
1) Не трогать innerHTML вообще. Использовать только DOM-методы.
2) Вставлять часть innerHTML через insertAdjacentHTML
3) Изменять innerHTML, затем только вставлять <span> через insertBefore
4) Делегировать обработчик события родительскому элементу.