Зачем нужны «ссылочные» методы и почему они не удовлетворяют интерфейсам?
*Human и Human это два абсолютно разных типа данных.
Значит и реализацию для интерфейсов для каждого типа надо делать отдельно.

*Human - указатель на значение типа Human.
func (h *Human) Speak() {

}
Если глянуть на внутренности языка, то метод это по сути обычная функция, у которой первым параметром является ресивер (тот объект, у которого вызывается метод). То есть, компилятор этот код превратит в
func Speak(h *Human) {

}
Соответственно, при вызове метода в случае *Human будет передача структуры по указателю, а в случае Human, по значению, со всеми вытекающими.

Что касается ошибки про несоответствие интерфейсу, то тут надо учесть, что если у структуры определены методы через указатель, то и соответствовать интерфейсу будет указатель на эту структуру: https://go.dev/play/p/o7EsGmeYSRS
Если же без указателя, то соответствовать интерфейсу будет сама структура: https://go.dev/play/p/oTsXP4DXaMJ
Но оба одновременно определить не получится.