Check for pangrams in elisp
(setq letters (get-letters s))


You are setting the same letters variable from different functions; in Emacs Lisp, that sets a global variable which is bad style: (1) that pollutes the global namespace, (2) that could overwrite an existing variable, and (3) the functions are not reentrant and could lead to bad suprises with side-effects. Better introduce variables with let.

Instead of doing (remhash "" letters), you can pass T for OMIT-NULLS in split-string.

Another approach is to transform the input text so as to downcase all letters, remove spaces, remove duplicate letters and check if it corresponds to the expected alphabet. For example:

(equalp (delete-duplicates
         (sort (coerce
                (downcase
                 (remove ?\s "The quick brown fox jumps over the lazy dog"))
                'list)
               '&lt;))
        (coerce "abcdefghijklmnopqrstuvwxyz" 'list))