Начнем с return — значение возвращается туда, откуда вызывается функция. Это и позволяет выполнять рекурсию — вызывать функцию "изнутри" самой функции, только уже с полученными внутри параметрами. Так получается несколько уровней вложенности (которые и называют глубиной рекурсии). В Вашем случае будет последовательно вызываться функция Merge_Sort для левой и правой половин списка, пока длина "половинки списка" не окажется равной или меньшей 1, после чего все "уровни" начнут "сворачиваться" в обратном порядке.