Edit in JSFiddle

const api = (() => {
  let _name = Symbol();
  return {
    set: (obj, value) => obj[_name] = value,
    get: obj => obj[_name]
  }
})();

const log = text => {
  let line = document.createElement("div");
  line.appendChild(document.createTextNode(text));
  document.body.appendChild(line);
}

let testObj = {
  visible: true,
  value: "abc"
};
api.set(testObj, "ninja");
log("Accessing the property: " + api.get(testObj));
log("Visible properties: " + Object.keys(testObj));
// Workaround
log("Workaround result");
let descriptors = Object.getOwnPropertyDescriptors(testObj);
Object.keys(descriptors)
  .forEach(name => log(`${name}: ${JSON.stringify(descriptors[name])}`));