I would recommend using your own binary format if you want efficient storage.
Creating and packaging deltas for levels should be done on the server side. The clients should be able to only read the deltas and apply them.
If you are comfortable with SQL and sqlite storage is good and efficient enough for you, there is no reason why not use it. You can package the deltas in any fashion you like and after retrieval apply them to the DB. This process could even be simplified if the server uses a similar database to store the levels.
For each entry you can store a "level validity start version id" and "level validity end version id". On the server side you can then simply use the version the client sends, pack the changes and apply them on the client.
Using sql commands directly in the exchange protocol is not a good idea. If one of the versions of the client application end-up using a different version of sqlite or if you need to change the storage system you will end-up with a bag of hurt. Use your own format.
If you need to secure the transfer you can use any encryption available to you.