Hi Remo,
kann ich gerade nicht ganz nachvollziehen.
Das hier:
und daher natürlich automatisch einen z-index hat
stimmt schon mal nicht. Nur positionierte Elemente können einen z-index haben, ja. D.h. heißt aber nicht im Umkehrschluss, dass positionierte Elemente automatisch einen z-index haben. Wenn du main nur eine Positionierung gibst, behält es den z-index des Elternelements (also body, z-index ist auto). Es konstituiert auch keinen neuen, eigenen Stapel-Ebenen Kontext.
Nimm mal die visibility Eigenschaft aus deinen divs. Alle unsichtbaren divs kriegen display:none, per Javascript schaltest du dann bgmask und das jeweilige "popup" auf display:block (und dabei also main = kein z-index, bgmask irgendwas höher 0 und die Popups irgendwas höher bgmask). Das geht, auch bei deiner Verschachtelung und auch in IEs...
Gruß
Antipitch