Чем именно виртуальный дом выигрывает в обновлении в сравнение с реальным домом?
Почему в реальном доме нельзя таким же образом менять только те узлы которые изменились?
Если меняешь только 1 узел, разницы практически не будет.
Если меняешь целое дерево - уже сложнее.
Если писать руками, то можно пойти двумя путями:
1. Снести всё (под)дерево в реальном доме, а потом построить новое заново
2. Руками пройтись по дереву в реальном доме и изменить только те узлы, в которых реально поменялись данные.

Второй вариант будет экономить на вставках, но тогда придётся все элементы вычитывать из дома, а если это будет происходить в цикле, или просто очень часто, то возникнут заметные тормоза.
По-хорошему надо сохранять и кэшировать элементы, чтобы их по 10 раз не вычитывать.

Вот этим virtual DOM и занимается вместо разработчика.

Много где читал что изменения в виртуальном доме вызывает изменение всего дом дерева так ли это?
Это плохой сценарий, если используется что-то неправильно, или если реально надо перестроить всё дерево.

В конечном результате всё-равно виртуальный дом сравнивается с реальным изменяет только некоторые узлы, так почему сразу не сравнивать узлы которые изменились с реальным домом?

Описал выше - получится тогда vdom, либо потеряешь очень много производительности из-за постоянных запросов к дому.

Почему обновление реального дома очень затратно И как так получилось что создание новой абстракции в виде виртуального дома сделала его только быстрее?
Затратно, тк это обращение к API браузера, которое медленнее, чем просто обратиться к объекту в JS.
А выигрыш из-за того что мало кто хочет самостоятельно писать такую абстракцию для эффективной работы с реальным DOM.
Приветствую. Вот хорошая статья, которая объяснит вам преимущество virtual dom. Что такое Virtual DOM?