Puedes intentar ORDER BY (done asc, aux desc)
donde aux se calcula con un CASE
para producir prioridad o fecha según el valor de done
(Es posible que deba convertirlos en el mismo tipo para que quepan en la misma expresión, por ejemplo, convertir la fecha en un número de día entero adecuado).
Por ejemplo:
SELECT * FROM tab
ORDER BY done desc,
case done
when 0 then prio
else to_days(thedate)
end desc;