>>374 interactive で文字入力が可能です。
また、insert は任意個の文字列を受けるので、concat する必要もないです。
(defun quote-region-by-tag (&optional (quotetag ""))
(interactive "*sTag: ") ; s => 文字入力を指示する。
; 入力された文字列は quotetag に割り当てられる。
(let ((begin (mark))
(end (point)))
(when (> begin end)
(let ((tmp begin))
(setq begin end
end tmp)))
(save-excursion
(goto-char end)
(insert "</" quotetag ">")
(goto-char begin)
(insert "<" quotetag ">"))))