I believe the reason it is too complex for a system call is generally that filesystems are implemented to the side of the system, so there is a lot involved in moving between filesystems that is beyond the scope of what a base call would handle. Whereas moving within the same filesystem requires very little actual work, so was deemed worthy.