1. Реализацию updateDOM можете посмотреть ниже, параметры переводятся в свойства элемента, здесь нет никакой магии)
2. в js контекст функции зависит от места его вызова, в данном случае как я писал выше, если передать в setInterval функцию, то она вызовется в контексте window, для того чтобы иметь доступ к оригинальному this как раз и есть это присваивание self = this. Нижнее подчеркивание в this._interval ничего не означает, это просто распространенный способ именования свойств объекта, когда приватные свойства начинаются с нижнего подчеркивания.
3. В констукторе enemy мы создаем элемент для объекта и записываем его в this.el, а после создания, добавляем этот элемент к DOM, чтобы он отображался. Убивание их интервала я тоже реализовал в методе stopMoving