Why, if a function accepts arguments, it fails on ajax calls?

No arguments are passed to the AJAX callback function. Variables passed with the request are available in $_GET or $_POST. So if your function expects an argument, it can’t be used as the hooked callback directly.

Your workaround is the correct way to use a function that accepts arguments in an AJAX request.