L'operatore è stato scritto per permettere di sommare un reale (double) ad un complesso. Ecco perché l'argomento è un double. E ovviamente il valore complesso temporaneo viene usato per restituire la somma con il valore corrente dell'istanza.
Nessuno ti vieta di scrivere un altro metodo + con un complesso come operando.

Per l'altra domanda, è proprio la ridefinizione dell'operatore + che permette questo comportamento. Il compilatore userà l'operatore ridefinito al posto del normale +