I think a good definition is probably like "If I try to use it on an old machine, it will work seamlessly."
Even if, say, a Pentium II machine is nowadays probably so old that some people will just go "but that's oooold" instead of focusing on the lightweightness, thing is: there are window managers (and perhaps simple DEs, like XFCE from before it started getting more bloated) which will run nicely on said machine. They're lightweight.
Firefox, OTOH, has memory leaks and requires several hundred megabytes in order to maintain several open tabs. It stopped being lightweight somewhere before Firefox 2 had been launched.
Your "doesn't consume a lot of computer resources" is also another possible benchmark, with this old machine benchmark, memory is usually the biggest problem: programs like LibreOffice, even if they're not slow, require more memory than, say, your average UNIX text editor (I mean stuff like
nano or butterflies).
Even then, CPU usage or disk access can be another thing to consider. I dislike the new GTK file picker not only because of their UI redesigns, but also because, when I used an older machine, I also noticed one of the changes they made was to introduce file sniffing that you simply couldn't turn off. This introduced long delays every time some GTK+ application opened a file picker, especially in directories with several files. Doing ls or using the QT file picker would be quick and easy. So would Firefox with its own file picker. But, say, Firefox with the GTK+ file picker prompting for the binary to open a file with would open /usr/bin and that would take several seconds to process. Since then, I think we can say the GTK+ file picker is not lightweight. A lightweight toolkit would, perhaps, allow you to toggle off this sniffing, as it can be intensive.
"the application doesn't fork new processes", "(a singe process or threads-only)": I don't know by how much, but processes will likely be slower than threads, yes. Taking threading/several processes (even if the latter is slower than the former) into account is a good idea — unless we're talking about a program that forks a lot (say, good old
bash fork bombs), they won't use that many resources, while they may improve responsiveness. One thing that may even happen is that someone who considers a program to be lightweight if it is responsive will say that a program is not lightweight if it blocks for some seconds doing something under the hood, and one way to avoid this is to have separate threads, one dealing with the UI and the other doing these things under the hood.
Lightweight can also be "just with the required features". For example, as I am not that much of a mouse or GUI person, I prefer media players that can be started with a file and just show the file with keyboard shortcuts, rather than a GUI player with lots of buttons and controls to use with the mouse. I could say
mplayer is lightweight compared to its GUI versions (or to, say,
vlc, although I think there is
cvlc). In the end, even if this does not require that much memory or CPU resources, it can still be considered "lightweight" if you think of it as "saving screen real estate".
Many Window Managers can be said to be lightweight compared to Desktop Environments because DEs provide several applications and tools to do various things, while WMs just, well, manage windows (DEs do, in fact, have WMs as one of their components).
A small commandline tool that does some task is also lightweight compared to some GUI application offering a bunch of menus to do the same thing, especially if you have to roam through the menus and options to do something you could do quickly with one command. (Although here I may be biased, as with my old machine, these GUI tools would usually be slower, just because of the GUI.)