It works to set the graph costs to 0 and then do rescoring with a new LM. However by doing so one is throwing away the transition and pronunciation probabilities (the graph cost is not just the LM cost), so it is more correct to first subtract the current LM costs, and then add the new ones. That's why you will see a cost subtracted (the LM already used).
When people talk about pruning in rescoring they mean that one does not fully rescore the lattice, but instead uses some intelligent method so that one avoids going down all paths. You have to do this when using an RNNLM because fully rescoring a lattice that was created from decoding with, for example, a lattice beam of 8 would take a very long time.
You cannot in kaldi rescore with a LM that has a different vocabulary than the initial one.