It is the standard behavior of ps to list kernel threads, as these too are processes--just a different kind of process, because they run in supervisor mode (which some people call "kernel mode").
If you run ps ax (or ps aux) without piping its output to grep, you'll see a whole bunch of kernel modules listed first (and then probably some others interspersed with user processes, if they were started later).
For example, here's the first 10 lines of the current output of ps ax on my system:
PID TTY STAT TIME COMMAND
1 ? Ss 0:03 /sbin/init
2 ? S 0:01 [kthreadd]
3 ? S 97:17 [ksoftirqd/0]
6 ? S 0:00 [migration/0]
7 ? S 0:24 [watchdog/0]
8 ? S 0:00 [migration/1]
10 ? S 6:06 [ksoftirqd/1]
12 ? S 0:18 [watchdog/1]
13 ? S< 0:00 [cpuset]
lsmod will list loaded modules. ps aux will list current processes, including kernel processes associated with modules. These are different things, however. For example, a loaded kernel module might have any number of kernel processes associated with it (zero or more).