The lspci and lsusb commands just enumerates the devices connected to particular buses. They read id from the bus and use special file to map this ids to strings.
The lsmod showns just list of linux kernel modules. Linux kernel module is part of linux kernel code which is loaded dynamically - this modules are not necessary drivers, it may be just any part of the kernel code. This mechanism is used to save memory and boot time and do not load all code on boot, to make kernel development easier (you can unload/modify/load parts of the kernel). As the device driver is one of good applications of this dynamic loading - it is used in most drivers. The non-driver example is iptables (the network filtering mechanism) there only parts are loaded which are actually requested by user.
The dmesg is just a kernel text log - usually developer white something there in case of initialization, but this is entirely voluntary - so what you find there and which format is completely random.
Complete lists of the supported hardware is hard thing to get. Kernel consists of very different parts made by different people and there is a lot of similar devices with different labels.
Usually you can try to find if your device is supported on dedicated pages:
This is mainly because most things require not just kernel driver by also kind of userspace layer and there is kind of 'project' which does both parts with main interface in userspace.
Most advanced list of the supported may be extracted from kernel code - there is usually list of pci/usb ids supported for each particular drivers - there is a way to extract it: http://www.cyberciti.biz/tips/linux-find-supported-pci-hardware-drivers.html. But if you have kernel module which has an ID in the list doesn't mean that device is fully supported or that you have userspace tools which allow you to use this module, or that this userspace tools exist in your particular distribution.
Sometimes distribution vendors provide list of supported devices, but this is usually some small subset.
For debian there is also list of pciid->kernel module mappings: https://wiki.debian.org/DeviceDatabase/PCI.
Regarding usb devices, many things like cameras have kind of userspace drivers via libusb - like cameras or so no. In such case you have no need in kernel driver at all.
Also, don't forget that linux runs on near 20 architectures (imagine how many drivers are in billions of different android smart-phones), each with own huge set of drivers - and you'll see that total amount will easily beat every other knows OS.