Letting client encrypt his/her data. How to ensure the client doesn’t lose his private data?

I am designing a web service where the client is allowed to encrypt his own data on client-side software & then send it to our server, so they can be sure their data is private on our side. Then, if client has encrypted values, we transfer some of server functionalities to client-side where the data is known. We are using AES encryption with salts. I have three questions,

  1. People are forgetful. If client forgets the encryption key, I believe it’s our fault not providing them a workaround. their data will be lost. So is it reasonable that client-side software can remember the password? does this introduce new vulnerabilities? (I am thinking about keeping unencrypted backups client-side, but isn’t it the same as keeping the password alone client-side)?
  2. When user wants to change the password, his old data should be downloaded to his client-side software, decrypted with old password, and re-encrypted with new password. Is it reasonable? am I missing something in privacy?
  3. Should Salts be kept server-side?

Thanks.