Ho fatto varie prove e sono arrivato alla conclusione che il tuo script iniziale dovrebbe comunque funzionare; non riesco a riprodurre il problema che hai indicato inizialmente, cioè il fatto che funzioni solo quando viene eseguito un refresh della pagina.

Lascia stare quanto ti ho consigliato in seguito e ripartiamo dal tuo primo script; ho solo "semplificato" la situazione in questo modo:
codice:
(function() {  'use strict';
  window.addEventListener('load', ()=>{
    const link = document.querySelector('#biblioteche > details > ul > li.tutte > a');
    link.click();
  });
})();

In sostanza non c'è bisogno di eseguire i 2 click sugli elementi in questione (i filtri di cui parli), basta solo eseguire il click sull'elemento finale dal momento che è già presente nella pagina (anche se non visibile).

Ora, fammi capire se così ottieni lo stesso problema da te descritto inizialmente.

Ti spiego in breve le mie considerazioni.

Dalle prove che ho fatto ho potuto riscontrare che l'elemento è già presente nel DOM del codice HTML sorgente (quindi non viene aggiunto alla pagina successivamente in modo dinamico, ad esempio quando si clicca sul primo filtro, ma è già lì) per cui è possibile manipolarlo non appena il DOM viene caricato e risulta pronto.
Per tale motivo avevo impostato un listener per l'evento "DOMContentLoaded", perché questo evento avviene appunto quando il DOM della pagina risulta disponibile, al contrario dell'evento "load" per il quale, oltre ad attendere il caricamento del DOM, viene attesa anche la conclusione del caricamento per tutte le risorse esterne (compresi gli script).

Indagando meglio però ho potuto constatare che quel click va ad interpellare il metodo di un oggetto che viene incluso proprio attraverso il caricamento di uno script esterno, un certo scheda.localizzazioni.select().
Questo oggetto (e relativo metodo) potrebbe quindi risultare non ancora disponibile quando l'elemento link lo è, perché magari il relativo script non è ancora stato caricato. Ecco perché a questo punto il metodo load (da te usato nel tuo primo script) risulterebbe quello più appropriato in questo caso.

Ma a questo punto non mi spiego perché con quel tuo script iniziale tu stia riscontrando quel problema.
Alla luce di quanto ho appurato proviamo quindi a semplificare, come ti ho indicato qui, e capire cosa avviene.
Teoricamente dovresti ottenere lo stesso problema iniziale; dammi però un eventuale riscontro e nel caso facciamo assieme delle ulteriori verifiche.