Q:

"Новые" ES6 классы. "Старые" дескрипторы свойств

Вопрос по синтаксису ES6.
Нотация ES6 классов предусматривает элегантное создание статических методов, геттеров/сеттеров, в блочной инструкции также удобно описывать все методы для экземпляров класса.  
А что насчет установки "флагов"(writable, configurable, etc) для свойств порождаемых объектов? Так ли это, что все еще необходимы дополнительные обертки?
  'use strict';

    function User(name, age) {

      class User {
        constructor() {
          this.name = name;
        }
      }

      let user = new User(name);

      Object.defineProperties(user, {
        gender: {
          value: 'male'
        },
        age: {
          get: function() {
            return age;
          },
          set: function(value) {
            alert('Молодость не вернешь!');
            return false;
          }
        }

      });

      return user;
    }

    const user = new User('Vasya', 23);
    user.age = 16;
    console.log(user.age);

A:

В созданном Вами примере - new не несет никакого смысла. Т.к. возвращается не экземпляр внешнего класса User.

"use strict";
class User {
  constructor(name, age) {
    this.name = name;
    Object.defineProperty(this, 'age', {
      value: age,
      writable: false
    });
  }
};

var user = new User('a', 123);

alert('user has age ' + user.age);
try {
  user.age = 12; //тут выбросится исключение, возраст не изменится
}
catch(e){
  alert('Ошибка при изменении возраста');  
}
alert('after trying change, age = ' + user.age);

В данном случае, из коробки возможность сделать alert у Вас нет, но свойство получается как раз только для чтения. Если хотите, подобным же образом можно опередить геттер, сеттер.
Вообще, судя по всему, в ES2015 нет возможности красиво объявить поле класса, как readonly. Однако, в ES2016 появятся декораторы, которые позволят это сделать достаточно лаконично.

