That doesn't follow - you can solve the problem without containers, e.g. by encrypting or hashing the filenames.
Containers protect the file sizes, but they lose the ability to selectively sync certain files to certain nodes.
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.
I'm not saying that one is better than other, just giving an example of where de-duping at block level is needed as @lugg asked.
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.