Basically a hook is a method to get another program to run your code. The most common way to hook a program is to take a dll it uses, overlaod a function within that dll with your own code, then have that dll call the real one. Another way is to determine a function call that the program will use and inject your dll into the programs memory via a loader and use the same technique as mentioned above (without the dll replacement however).
A hook dosn't have to be this specific, its basically anything that intercepts some procedure and "re-interprets" it. A keyboard hook for example may take letters stored in the buffer of the keyboard, and filter certain words or key combinations. For example, Pressing CTRL+ALT+DEL is a low level keyboard hook.