На самом деле, defvar не делает то, что вы думаете, он делает тоже: он только изменяет значение, если раньше значения не было. Вот фрагмент, который делает то, что вы ищете, используя аргумент CTRL-u:
(defun set-my-var (value)
"Revised version by Charlie Martin"
(interactive "p")
(setq my-var value))
и вот пример, код из буфера *scratch*
(defun set-my-var (value)
"Revised version by Charlie Martin"
(interactive "p")
(setq my-var value)) ; do ^J to evaluate the defun form, showing return in the buffer.
set-my-var
(global-set-key "\C-v" 'set-my-var)
set-my-var
;Another ^J
;;; Now, what's the value after ^U^V?
my-var
4
;;; Now ^U 8 ^V
my-var
8
;;; now ^U^U^V
my-var
16