Заголовок слайса передаётся по значению. Если в функции делают append, может выделиться новый массив и в локальную копию заголовка записывается новый указатель - вызывающий свой слайс не видит. Чтобы изменить слайс снаружи, передают указатель на слайс *[]T или возвращают новый слайс из функции и присваивают: s = append(s, x) и вернуть s.