FreeBSD is an operating system, not just a kernel. This statement does not mean quite as much as it used to, however, because the very notion of a kernel is fairly arbitrary. In a UNIX context, it means that users can't access certain libraries and executables after booting has finished. The kernel manages the hardware for applications, even though today many UNIX-type operating systems would give user-level threads a role in managing kernel resources. You can safely assume that anything users cannot access during run time is part of the kernel. This does not mean that users can't influence kernel behavior. Certain utilities can report and tune memory management, for instance, and they are definitely within the purview of the user. These utilities communicate through the system's API, which is not part of the kernel, although it is quite clearly part of the operating system. FreeBSD, of course, includes all these and many other utilities and applications that deal with the characteristics of networking and hardware.
If you were to compare the contents of a complete Linux kernel download and a FreeBSD download, there would be much that the downloads have in common. Both have IP stacks, memory-management routines, file system implementations, and so on. The file system hierarchy has demonstrably similar origins, and most command-line applications have identical names and similar command-line semantics. The actual implementations look somewhat different, of course, but you would still be able to see that both systems have similar conceptual origins. A major architectural difference lies in the way FreeBSD reads and writes files to the so-called buffer cache, which (strictly speaking) does not even exist as an entity separate from virtual memory. Linux has always managed buffer cache sizes automatically, but its memory-management routines work differently from FreeBSD's.