Most file systems provide the ability to lock a file and SQLite does indeed use this feature. According to their documentation though, with many configurations, file locks on network shares are not consistently honored. I suspect this is a big cause of the corrupt database issue. If you can't guarantee atomic access to the database though, I am not sure there is a work around aside from limiting access to the database to only one app (I am referring to a client/server scenario again).
Oh, indeed. Filesystems should provide a secure way to lock the file. It should be atomic, but as you said it wont work nicely when it comes to networked shares (Windows, Linux... both are in the same boat).
So, if someone writes a server component that handles all the talking to the SQLite DB (as we don't want to rely on the broken locking over network) it would solve the DB corruption. Also same component could be used to make sure that the data iself is valid (different issue that the DB corrution).