Можно ли сделать сеттер и геттер не для свойства объекта а для самого объекта?
Ну можно положить сам объект в window и сделать соответствующие геттер и сеттер.Object.defineProperty(window, 'prozrachnost', {
    set(value) {
        if (value instanceof Osobaya_peremennaya) {
            window._prozrachnost = value;
        } else {
            window._prozrachnost.znachenie = value;
        }
    },
    
    get() {
        return window._prozrachnost;
    },
});

window.prozrachnost = new Osobaya_peremennaya;
window.prozrachnost = 0.5;
(не пробовал. а если без window. то в строгом режиме не запустится)
Но вообще всю эту геттерно-сеттерную магию не очень весело читать, разгребать и дебажить. Лучше сделайте как Александр посоветовал, он всё правильно сказал.
Нет. Вы присваиваете переменной другое значение, теряя экземпляр объекта.
Если нужно сократить запись, напишите метод в объекте, который будет обрабатывать сразу несколько переменных из параметра-объекта.
Как нибудь так:myshader.someFunc({foo: "This", bar: "works!"})