Hashing doesn't solve the problem completely. You are still giving away information about file count, size & hierarchy.Sure; I was just talking about the file names. You can avoid the hierarchy part by transmitting it separately from the files in a secure way, though.
Regarding selective sync : you'll have to organize the files logically into containers. I think even Dropbox doesn't let you sync files selectively, you have to have content separated into folders.
git-annex does. You can implement rules to decide what files should be synced, which should be dropped locally, etc.
For example, an MP3 player running it might have a rule such as
filename(*.mp3) or filename(*.ogg)
and it'll only sync those files, regardless of their directories.