no, sembra dia fastidio il posizionamento assoluto rispetto a quello relativo del box padre, il problema non si presenterebbe se fosse normalmente contenuto in esso

idem se avesse un altezza non relativa, non la perderebbe

la prima soluzione che mi viene in mente e' rilevare l' altezza e settarla dopo aver modificato la lunghezza
codice:
var h=document.getElementById("div2").offsetHeight;
document.getElementById("div2").style.width = "80%";
document.getElementById("div2").style.height = h;
che, almeno nell' esempio minimale che hai postato, sembra funzionare

ciao Pietro