smartparens package has this behaviour by default for (, {, [ and ".
Additionally it is possible to add other chars:
;; wrap selection with a symbols
(sp-pair "*" "*" :actions '(wrap))
(sp-pair "_" "_" :actions '(wrap))
(sp-pair "=" "=" :actions '(wrap))
(sp-pair "+" "+" :actions '(wrap))
(sp-pair "/" "/" :actions '(wrap))
(sp-pair "$" "$" :actions '(wrap))
(sp-pair "-" "-" :actions '(wrap))
(sp-pair "«" "»" :actions '(wrap))
(sp-pair "“" "”" :actions '(wrap))
(sp-pair "´" "´" :actions '(wrap))
(sp-pair "`" "`" :actions '(wrap))
(sp-pair "'" "'" :actions '(wrap))