With LD_PRELOAD you can hook any _function_ call.
A syscall is something different.
It depends how the syscall wrapper within the libc is coded.
Some can be hooked...
So an app calls the open() function. This results in an unresolved symbol which the run-time linker matches up with the open() exported by glibc. glibc then does the open() syscall.
If libc implements it, then it is by definition in section 3.
EDIT: (signing out of this sub-thread)
Have you ever called a system call by hand using assembly?
Have you ever looked at glibc's source?
Habe you ever looked at the kernel's close() syscall?