"
defineProperty", он декларирует свойство, а не устанавливает флаги: 
Object.defineProperty(window, "deck", {
    writable: false,
    configurable: false,
    value: (function(){
        var massOfCards = [];
     
            // здесь заполняем массив
     
        return massOfCards;
    })()
});
 Если пользуетесь современным javascript, то можно и так: 
const deck = (function(){
    var massOfCards = [];
 
        // здесь заполняем массив
 
    return massOfCards; //Ошибка!
})();
Только одна мелочь: содержимое массива всё равно вы сможете менять, защищаете от перезаписи вы только саму переменную.