Todos esses caracteres têm uma funcionalidade especial, dependendo se um caractere de escape os precede. Isso depende do caractere se uma sequência de escape precedendo o caractere com funcionalidade especial a utiliza (ou seja, um ^ executa uma funcionalidade especial, um \^ não, onde um ( não não executa especial funcionalidade, e um \( faz.
A expressão que você está procurando é a seguinte
s/\^(\([^)])\))/\^\{\}/g
A expressão literalmente estado, corresponde a um caret seguido por um open_parenthesis seguido por qualquer caractere exceto um close_parenthesis seguido por um close_parenthesis e substitua por aa caret seguido por open_curly_bracket seguido pelo conteúdo encontrado ao pesquisar any_character_except a close_parenthesis (ou seja, o conteúdo entre \( e \) ) seguido por um close_curly_bracket
Nota: outras abordagens existem também