I don't know, do you consider "gphoto2 -L" to be a low-level system call? I certainly call it from a shell script. That produces a nice list of files on the camera, eminently processable from shell, which I parse to look for files I want to actually download. The ones I want are then downloaded using "gphoto2 -p".
I've been using such a shell script (my photo handling needs are somewhat complex in terms of where the files go, and how I want to recognise something that has already been downloaded, etc), since about 2006.
If you meant shell literally as in "nothing but bash, no perl, no sed, no add-on tools [like gphoto2 in this case]", then you are right, it cannot be done.
But when most people say "do it in shell" they do pre-suppose a bit of this sort of stuff.
Even so, I'm not necessarily saying every nuance of f-spot can be done. But I bet the bulk of it can. Maybe a little perl-Tk or some Qt binding for a bit of GUI "cream on top".