Mah per prima cosa un orm non serve a "poter cambiare database senza cambiare il codice". Nessuno davvero vuole fare una cosa del genere: quando ti tocca davvero farlo in produzione, son dolori non da poco. E comunque, per quanto un orm possa astrarre, le differenze specifiche tra i diversi database sono sempre lì, e se vedi ci sono sezioni apposite della documentazione degli orm dedicate appunto a spiegare che cosa si può fare con un database e che cosa si può fare con l'altro.
(e quindi sì, anche gli orm sono "leaking abstractions"... non ti salvano dal peso di dover studiare a fondo il database sottostante
https://pythoninwindows.blogspot.com/2020/03/come-imparare-python-senza-studiare.html )
In secondo luogo, beh, non esistono "dilettanti" e "professionisti", esiste codice scritto bene o scritto male. Quindi, se la domanda è se l'orm ti aiuta a scrivere codice migliore, direi che la risposta è sì... forse... nel senso che eviti certi problemi ma non è detto che tu scriva poi buon codice nello stile dell'orm.
A parte questo, se la domanda è "un orm è utile?", bisogna sempre chiedersi "rispetto a cosa"... Cioè, se non usassi un orm ficcheresti query sql direttamente nel codice? Allora sì, un orm è totalmente assolutamente utile. Ma del resto, se appena ti poni il problema di separare il codice di gestione del database dal codice della tua applicazione, in pratica è probabile che tu stia già inventando un piccolo orm casareccio... e allora, perché non usare direttamente un orm e farla finita, no?
Un'altra cosa terra-terra, è che un orm probabilmente ti costringe a pensare alla gestione del database in termini più corretti: capire che cosa è una connessione, che cosa è una transazione,... problemi di sicurezza... problemi di efficienza... etc. E' probabile che un principiante, studiando bene la documentazione dell'orm, finisca per imparare parecchio anche di sql.
Poi non è che un orm sia la bacchetta magica che risolve i problemi del mondo, eh. A livello teorico esiste un concetto che si chiama "object/relational impedance mismatch" (googla!) che in pratica dice che ci sono delle irriducibili difficoltà a mappare una "tabella" di database con un "oggetto" OOP... e sicuramente tutti gli orm danzano intorno a questo problema, ciascuno a suo modo. Ma onestamente, direi che prima di arrivare a quel punto, di strada se ne può fare parecchia.
Del resto non è che uno sia proprio obbligato a usare un orm. Sqlalchemy, per esempio, ha un orm ma ha anche tutta una libreria DAO estremamente ben fatta.