chiedo ad ogni modo scusa se vi ha stancato il mio codice
Figurati, non era questo il punto
Gran parte degli utenti di questo forum non sono che principianti; per cui, il mio intento è solo quello di dare dei consigli (spero utili) anche su come impostare meglio il tutto, a prescindere dall'oggetto della richiesta.

nel punto 1 intendo per entrambi gli ambiti se possibile
Sì, è possibile ma quale pensi sia il vantaggio di avere due sistemi che fondamentalmente fanno la stessa cosa?

Secondo te potrebbero coesistere senza creare conflitti tra loro?

Dovresti organizzarli in modo che un metodo abbia priorità sull'altro perché, alla fine, entrambi devono applicare una classe precedentemente memorizzata (o in locale o sul server) e questa, in determinati casi, potrebbe anche non coincidere tra i due metodi. Capisci quale sia il problema?

Il localStorage agisce memorizzando e recuperando il dato (nome della classe) in locale; va da sé che questo sistema funziona anche se momentaneamente l'utente naviga senza essere connesso; in tal caso però non potrà ovviamente avvenire la memorizzazione sul server, dove sarà quindi mantenuto l'ultimo dato che era stato memorizzato in precedenza, finché l'utente era connesso.

Avresti quindi una discrepanza tra i due dati. Nel momento in cui l'utente torna a navigare connesso, e ad esempio apre una nuova pagina del sito, quale classe deve essere applicata al body? Quella locale o quella recuperata dal server?

Forse sarebbe meglio quella locale; ma sarebbe un problema se lo stesso utente utilizzasse diversi browser/dispositivi, perché potrebbe aver impostato, e quindi trovare, un diverso tema accedendo da browser piuttosto che da un altro.
Forse quella dal server; ma allora memorizzarla in locale non avrebbe senso.

A mio parere se il sito funziona con l'accesso di utenti registrati, dovresti memorizzare i dati sul server e qualora si stia navigando disconnessi dovresti avvertire l'utente che per certe funzionalità è necessario essere connessi; o semplicemente impedirne la navigazione.

A meno che il sito non sia accessibile anche da utenti non registrati (ospiti), per cui avrebbe senso avere il sistema di memorizzazione sul server per gli utenti registrati e quello locale per gli utenti ospiti. Ma i due sistemi dovrebbero funzionare in modo distinto l'uno dall'altro.

In qualunque caso per memorizzare il dato puoi inserire opportuno script all'interno della funzione scegliTema().
A grandi linee, se devi memorizzarlo in locale puoi usare localStorage come già accennato, mentre se devi memorizzarlo sul server puoi effettuare una chiamata AJAX ad un tuo file lato server che si occuperà di registrarlo nel database.