По сути - ничем.
Фактически - мелочами.
У метода автоматически параметром является объект класса, к которому метод относится.
Но вам никто не мешает передавать объект класса и в явном виде в качестве параметра.
Правда метод класса будет автоматически иметь доступ к внутренним защищенным полям класса, чего не будет иметь функция, в которую этот объект класса передан как параметр.
Но от языка зависит. Для Go, к примеру, если функция определена в том же пакете, то нет никаких ограничений на доступ к внутренним непубличным полям структур.
Функция vs Процедура - результат функции можно непосредственно присвоить переменной
a = function(b)
с другой стороны и с процедурой можно сделать то же самое, но чуток сложнее:
function(&b)
a = b
То есть это чисто для удобства.
Хотя отказываться от этих всех удобств я бы не хотел.
Еще во многих языках используется одно и то же ключевое слово, к примеру, func,
но фактически это может быть и процедура и метод и реально функция.
Что не должно вводить в заблуждение.