Yes, there's a fourth one,
hangen, which use is more transparent.
For people, it will be more or less clear which one to use when. For objects it's often hard and sometimes seemingly arbitrary. Basically, it has to do with
how an object 'is' somewhere.
For example, you could say
de boeken staan in de kast, like the ones on the the upper left shelf
here, or
de boeken liggen in de kast, like the ones on the upper right shelf, or on the bottom shelves. So it depends on the uprightness of an object, in as far as it can be upright or not (
op tafel ligt een appel altijd)
Zitten is hard. Two important meanings that
zitten can convey come to mind now. One is close attachment:
als er vuil op de stoel ligt, you can simply wipe it off,
als er vuil op de stoel zit, the dirt sticks to it and you will have to scratch it off, for example. This 'sticking sense' makes that
zitten can be used for things being somewhere resisting gravity:
een vlieg zit op het plafond whereas
een lamp [like
this one]
hangt aan het plafond - mind the different preposition - it's a matter of orientation really. (The sticking sense extends even to things like
de steel zit op de pan 'the handle is on the pan'.) Another one is confinement.
Appelsienen liggen in een schaal als deze, liggen wellicht zelfs op een schaal als deze, maar wanneer je thuiskomt van de winkel zitten ze nog in je boodschappentas.
To complicate matters,
zitten,
staan, etc. +
te + <infinitief> is a common construction that is equivalent to
aan het <infinitief> zijn (and thus to the English progressive) but which often has a nuance of irritation. For example:
hij zit de hele tijd de zeuren 'he's whining all the time'
(een teler die ziek is en niet kan oogsten: )
en ondertussen hangen mijn appels daar maar te rotten 'and meanwhile my apples are just hanging there, rotting'
Returning to your original question

, words 'stand' in Dutch (because letters have an obvious top and bottom, and therefore can be upright (or not), I'd guess, extended to non written language as well). Similarly, if you see a sign and want to know what it says, you should ask
wat staat er(op)? (not *
wat zegt het or something).