When you sum the probabilities of falling into each level of the outcome variable, of course they'll sum to 1, because the union of all the levels are your sample space, and P[sample space]=1. It has nothing to do with dependence, you actually can't even talk about dependence since your levels are not variables on their own, but just categories of the same target variable. In your case, the target is the percentage of visitors falling into each age group. In hydrology, you would have stream flow magnitude (low, medium, high), in marketing you would have sentimentality of a tweet (angry, sad, happy), and so forth.
Turning the output variable into a factor as you suggested makes sense, but it is true that it makes you lose some information (also, I think in that case you should NOT use class probabilities as proxies for percentages). To address this issue, why don't you keep your outcome variable continuous (pseudo-continuous actually since it can only take on discrete values I guess), and use a one-versus all approach where each ML algo learns to predict the percentage of a given age group based on all input variables. It would be a regression task rather than a classification task. Then, for a new observation, you can directly predict the percentage of each group, and aggregate the results.
One potential issue with this approach is that the percentages might exceed 100 in some instances. You could try to come up with some aggregation rule, or try to train a model to predict directly a 3 dimensional outcome (essentially you're trying to predict where to fall in the portion of a $100*100*100$ cube below the $x+y+z=100$ plane). It might be possible. I have found this reference about regression with a two-dimensional output variable which seems useful. The excellent lectures about spatial stats by Douglas Nychka from the NCAR might also be helpful. Some R code is also available.