The limits are frequently practical rather than theoretical.
For example, how much fun would it be to create a backup of a 20TB single node? Or to resync a single secondary?
Having said that, the raw size of data is usually only the third reason that people shard.
The first one is usually to access more RAM, the second is to have more disk IO bandwidth.
And the relationship of above to total data size is very tenuous at best. It all depends on how much of your data is active, how much churn there is, etc.
Asya
P.S. of course this all assumes indexed queries - if you don't tune your queries to use indexes and constantly have collection scans, then obviously then size of the data will have effect on performance very directly.