Как удалить текст, не трогая дочерние элементы?
Надо перебирать узлы – Nodes – в свойстве childNodes у label.

Текст будет в отдельном узле с типом Node.TEXT_NODE и именем nodeName == "#text"

Методом Node.replaceChild() заменить его на добавляемое под-дерево.

snippet
Каюсь, что сделал на jquery (а не на ванильном джсе), но итог устраивает полностью:
$('input[value="Вася"]')
    .hide()
    .parents('label')
    .append('<div>my content</div>')
    .contents().filter(function(){ return (this.nodeType == 3);}).remove();