Почему при присвоении значения переменной «1» переменной «2», переменная «2» заменяется на «1»?
Вы присваиваете не значение, а ссылку на значение. Так происходит с объектами и массивами.let a = {x:1};
let b = a; // Теперь a и b указывают на один и тот же участок памяти.
b.x = 2;
console.log(a.x); // 2    Ах, вот оно как!

//Как скопировать:
let c = {}; //Создается новый объект и под него выделяется новая память
c.x = a.x; //Копирование значений, т.к. x это не объект.

//Универсальный вариант (копируются все свойства):
a.y = 11;
a.z = 111;
let d = Object.assign({}, a); 
console.log(d); // {x:1, y:11, z:111}Object.assign()
Когда вы присваиваете объект, вы присваиваете ссылку на объект, а не делаете его копию. А потом переписываете поля самого emptyOrder, через ссылку на emptyOrder в session[ID].order. Нужно делать копию данных...
session[ID] = session[ID] || {
    log: [PathTmpl.main_menu],
    inline_log: '',
    name: ctx.from.first_name,
    last_name: ctx.from.last_name,
    auth: 'new',
    admin: false,
    orders: [],
    phone: '',
    delivery: emptyAdress,
    order: Object.assign({}, emptyOrder)
  }
P.S. Не забудьте подключить полифил для Object.assign или пользуйтесь аналогичным методом фреймворка.