da cosa dipende?
Questa è la tua funzione:
codice:
$('#searchfor').keyup(function() {
   var searchedText = $('#searchfor').val();

   $( "div" ).each(function() {
      var ParagText = $(this).text().replace("<span>", "").replace("</span>","");
      var theRegEx = new RegExp("(" + searchedText + ")", "igm");
      var newHtml = ParagText.replace(theRegEx, "<span>$1</span>");
      $(this).html(newHtml);

      if($(this).has("span").length){
         $(this).parent().show();
         $(this).show();  
      }        
   });
});
Ci sono 2 principali elementi che causano il problema:

1 - Con lo script $( "div" ).each(..., stai eseguendo un ciclo per tutti i div della pagina, compreso <div id="sub1" class="sub"> che contiene a sua volta i div delle domande e delle risposte.

2 - Per ognuno di questi div utilizzi il metodo .text() per prelevare il solo testo (escludendo quindi tutti gli eventuali tag html). A quel punto, dopo i vari replace, usi il metodo .html() che rimpiazza l'intero contenuto html relativamente ad ogni div esaminato.
Morale della favola, anche il suddetto <div id="sub1" class="sub"> viene ripopolato con il suo relativo testo privo dei tag html che conteneva in origine, perdendo di fatto i tag <div> in esso contenuti, cioè i tag relativi alle domande e risposte.
In effetti non ha senso processare il div contenitore, perché stai esaminando lo stesso testo (dell'intero contenitore) che dovrebbe essere invece esaminato singolarmente per ciascuno dei div figli.

Per risolvere potresti intanto restringere la ricerca ai soli div delle domande e risposte, di cui sei sicuro che contengano solo del testo, o comunque che non contengano ulteriori div.

Potresti usare un selettore del genere:
codice:
$( ".sub>div" ).each(...
Ad ogni modo, in generale, la sostituzione al volo di contenuto html non è mai un procedimento così scontato e sicuro, perché il rischio di sfasciare qualcosa è alto, come in questo caso che è comuque un caso relativamente semplice.


PS: nel codice sorgente della pagina che hai lincato ci sono diversi errori che lo rendono non valido. Ad esempio, il tag <script> è posto tra la chiusura del tag <head> e l'apertura di <body>. Questo è un errore strutturale del markup. Anche se il browser riesce magari ad interpretare il codice in maniera opportuna, è sempre meglio evitare qualsiasi errore. Il tag <script> può essere posto all'interno di <head>o all'interno di <body>.
Gli altri diversi errori puoi verificarli attraverso un validatore. Vedi questo: https://validator.w3.org/