Сериализуется только функция верхнего уровня, то есть код того самого fun() который передается, в то время как вызываемые внутри fun() функции заменяеются ссылками, которые и сериализуются. Пока что так выглядит.
Кажется, это так и должно работать. Иначе нужно передавать все зависимые функции и модули. А это лучше делать не передачей по сети, а деплоем одинакового кода на разные машины. Что, собственно, все и делают.