試しに
・引数は配列を渡すのみ
・内容を逆にした配列を返し、引数で渡した配列の内容は書き換えない
再帰で書いてみたが

func ReverseArray(arr []int) []int {
  n := len(arr)
  result := make([]int, n)
  copy(result, arr)
  var reverseArray func(int, int)
  reverseArray = func(start int, end int) {
    if start < end {
      result[start], result[end] = result[end], result[start]
      reverseArray(start + 1, end - 1)
    }
  }
  reverseArray(0, n - 1)
  return result
}

エレガントとは程遠いな。
ぜひLISP仕込みのエレガントな例をGoで書いて披露してほしいものだ。