Что творится под капотом у vue.js?
Если совсем вкратце, то каждое значение в data заворачивается в геттер и сеттер. Таким образом при изменении свойства у нас вызывается функция-сеттер и мы можем об этом узнать и произвести какие-то действия.
P.S. Можно еще rivets расковырять, там похожий подход, но кода поменьше.
Создается проперти app3.seen при изменении которого обновляется DOM.