По первому вопросу, конечно же код не должен повторятся, оберни в функцию и используй когда нужно
myFnc = fucntion(){
var div = document.getElementById("nav");
if (window.innerWidth > 320) {
div.style.width = parent.style.width + "px"; // мои каракули
}
}
window.onload = myFnc();
window.onresize = myFnc();
Вроде можно даже так "window.onload = window.onresize = myFnc();", не знаю не проверял.
По второму можно дописать
if (window.innerWidth <= 320) {
div.style.width = window.innerWidth + "px";
}
else {
div.removeAttribute('style');
}
Этот способ убирает инлайн-атрибут style, снимая стили навешанные через js и написаные прямо в html