Hola:
El evento click se ejecuta antes que se haga el enlace, y si con ese evento enlazas, no tiene sentido el href (creo que la teoría es así

)
Se me ocurre que con el onclick se realice la descarga, pero mejor con un window.open a una ventana nueva, y el refresco lo hagas con el enlace, pero el target debería ser _parent (o _top)...
echo <<< enlace
<a onclick="window.open('public_html/$ruta', '_blank')" href='index.php?desc=1&id=$codigo' target='_parent'><b>Descargar</b></a>
enlace;
Pruébalo y nos cuentas.
Saludos