You can use xmodmap to do something like this:
xmodmap -e 'clear lock'
xmodmap -e 'keycode 66 = Shift_Lock'
xmodmap -e 'add lock = Shift_Lock'
This behaves more like a typewriter in two ways: a press of the shift key will unlock the caps lock; and using the shift while the lock is on will not invert back to lowercase.
The caps lock key will still toggle, so it doesn't quite meet your requirements, but at least pressing shift on its own will guarantee which state you are in.