Вот функция Emacs Lisp, которая выполняет первое задание (работает с выделенным текстом):
(defun my-make-list (start end)
(interactive "r")
(insert "<ul>\n")
(mapcar '(lambda (line) (insert (concat " <li>" line "</li>\n")))
(split-string (buffer-substring start end) "\n"))
(insert "</ul>")
(delete-region start end))
Во втором случае я бы просто использовал поиск / замену.