There are two ways to access network filesystems: either the application implements the access to the filesystem or the kernel/daemons implement an abstraction layer such that the remote filesystem appears inside a local directory (mounted).

There's really more level than that. The kernel/daemon method can happen in kernel space (such as some nfs implementations) or in user space (as in FUSE and LUFS). The major drawback of kernel space implementation is if the software somehow yaks on you, it can hang your kernel (one of the only things that cause you to have to reboot Linux). The major drawback to a user space implementation is performance (which is hardly a drawback at all especially since the benefits in stability are so much more important).