What is the very fundamental difference between Unix, Linux, BSD and GNU? Unix was the earliest OS, so the term 'Unix like' is understandable, since they have kernel, file system structure, most of the commands, users etc are same as Unix. Still why are they different? What made them set apart? Is it the kernel?
That is a difficult question to answer.
First "Unix Like" or "*nix" usually means POSIX. All the systems you listed are POSIX systems. POSIX is a set of standards to implement.
Now for the harder questions.
GNU isn't really an OS. It's more of a set of rules or philosophies that govern free software, that at the same time gave birth to a bunch of tools while trying to create an OS. So GNU tools are basically open versions of tools that already existed but were redone to conform to principles of open software. GNU/Linux is a mesh of those tools and the Linux kernel to form a complete OS, but there are other "GNU"s. GNU/Hurd for example.
Unix and BSD are "older" implementations of POSIX that are various levels of "closed source". Unix is usually totally closed source, but there are as many flavors of Unix as there are Linux if not more. BSD is not usually considered "open" by some people but in truth it is a lot more open then anything else that existed. It's licensing also allowed for commercial use with far fewer restrictions as the more "open" licenses allowed.
Linux is the new comer. Strictly speaking it's "just a kernel", however, in general it's thought of as a full OS when combined with GNU Tools and a bunch of other things.
The main governing difference is ideals. Unix, Linux, and BSD have different ideals that they implement. They are all POSIX, and are all basically interchangeable. They do solve some of the same problems in different ways. So other than ideals and how they choose to implement POSIX standards, there is little difference.
For more info, I suggest you read a brief article on the creation of GNU, OSS, Linux, BSD, and UNIX. They will be slanted towards their individual ideas, but when you read through, you will get a good idea of the differences.
This Unix genealogy diagram clearly shows the history of Unix, BSD, GNU and Linux (from Wikimedia):
Linux is not an OS, it's a kernel. Linux by itself has no 'userland' environment (no apps, no commands, no ...etc...).
If you want to have a complete OS, you have to add an userland to your kernel. Historically, for Linux, it's GNU. All(?) Linux distributions are not 'real Linux' distributions. They are GNU/Linux (GNU + Linux) distributions.
BSD is a 'unix-like' complete OS, with it's own kernel and it's own userland (no linux kernel nor GNU).
GNU/Linux and *BSD family (FreeBSD, OpenBSD and NetBSD) are 'unix-like' OS, they behave like Unix.
Here is a comparison between (GNU)/Linux and *BSD : http://www.freebsd.org/doc/en/articles/explaining-bsd/comparing-bsd-and-linux.html