You don't store the password, but you store its hash...Everybody knows that.
You should offer a recovery interface and delete the old hash and create a new one from the new password..
That is because you can't get the password back from the hash. You can not decrypt a hash.
Verification is by comparing hashes not passwords.
If there is an information leak, you don't leak passwords but pretty meaningless hashes.
In principle this has nothing to do with the database, but with the userinterface.
This is not SQLite3 specific.
In SQLite3 you can you a user defined function to hash the password and compare the hashes.
In other databases one usually writes a stored procedure for that.
I have a unit for Windows and Linux for that. Must update it a bit for BCrypt and newer OpenSSL.
Interface is simple:
function HashPassword(const password: string): string;cdecl;
function CheckPassword(const entered_password: string; const stored_hash: string): Boolean;cdecl;
Both can be massaged into a UDF.
I will attach it when I have updated it.