Potresti provare ORDER BY (done asc, aux desc)
dove aux viene calcolato con un CASE
per dare priorità o data in base al valore di done
(potrebbe essere necessario eseguirne il cast allo stesso tipo per adattarli alla stessa espressione, ad esempio trasmettere la data a un numero di giorni intero adatto).
Ad esempio:
SELECT * FROM tab
ORDER BY done desc,
case done
when 0 then prio
else to_days(thedate)
end desc;