こんな感じ?なんかもっとスッキリ出来るのかな。
あと素の emacs だと 28bit までしか扱えなかったんじゃなかったっけ。最近のは違うんだろうか。

あと insert-file-contents-literally は全部読み込むわけじゃなく、指定した範囲だけ読み込むから
とんでもなく大きい場合でも問題ないよ。

(defun read-dword (filename pos)
(with-temp-buffer
(set-buffer-multibyte nil)
(insert-file-contents-literally filename nil pos (+ pos 4))
(let ((result 0))
(dotimes (c 4 result)
(setq result (+ (lsh result 8)
(string-to-char (buffer-substring (- 4 c) (- 5 c))))))

)))