Assim como o ThomasAlmeida comentou, também usei algumas das alternativas antes de aprender mais sobre banco de dados.
Para quem ainda está iniciando em JS e quer ter noção de como fazer um CRUD básico, o localStorage é uma ótima opção.
Mas, aproveitando a oportunidade, vai uma dúvida aí: Quando uma preferência de usuário é salva no navegador (cliente), por exemplo, o tema, quando a aplicação é iniciada no servidor ela virá com o tema padrão, só depois ele vai puxar a preferência no navegador e atualizar. Qual seria uma forma viável de a tela não "piscar" com o tema padrão (servidor), para só depois ir para o tema do usuário (cliente)?
Perdoe-me se houver alguma ignorância na pergunta.
Olá, Thiago! Acredito que uma forma de resolver isso é trazer a página do servidor já renderizada com o tema escolhido pelo usuário. Para isso, antes de trazer a página renderizada será necessário checar se há alguma escolha de tema no localStorage. Se houver, a página será renderizada e servida já no tema escolhido.