Each user is free to choose whichever desktop environment feels
the best. The end result is that, if you use an all-kde or all-gnome
system, the look and feel of the environment is very consistent; and
your applications all interact between them pretty nicely. This just
wasn't possible when we had apps written in a hodgepodge of different
toolkits. The range of facilities provided by modern desktop
environments under Linux also enable some other niceties, like
component architectures (KDE has Kparts and GNOME uses the Bonobo
component framework), which allow you to do things like having a live
spreadsheet or chart inside a word processing document; global
printing facilities, similar to the printing contexts found in
Windows; or scripting languages, which let more advanced users write
programs to glue applications together and have them interact and
cooperate in interesting ways.
Under the Unix concept of "desktop environment", you can have
programs from one environment running in another. I could conceivably
use Konqueror within GNOME, or Gnumeric under KDE. They're just
programs, after all. Of course the whole idea of a desktop environment
is consistency, so it makes sense to stick to apps that were designed
for your particular environment; but if you're willing to cope with an
app that looks "out of place" and doesn't interact with the rest of
your environment, you are completely free to do so.