At the extreme of fanciness, you could fit a generalized linear mixed model, with a random effect accounting for possible differences among individuals within each group.

You could also consider doing a permutation test, though with some potential loss of power: just do  the $\chi^2$ test based on collapsing the individuals between the groups, put compare the observed statistic to the values you get after permuting the individuals between the two groups.

Here's some R code, simulating data like you mention:

    x <- matrix(sample(1:6, 60*8, repl=TRUE), nrow=8)
    x <- apply(x, 1, function(a) table(factor(a, levels=1:6)))

    p <- rep(c(15,5), each=3)
    p <- p/sum(p)
    y <- matrix(sample(1:6, 60*8, prob=p,repl=TRUE), nrow=8)
    y <- apply(y, 1, function(a) table(factor(a, levels=1:6)))

    combined <- cbind(x, y)
    ttt <- rep(c(0,1), each=8)

And here's my suggested permutation analysis:

    combtab <- cbind(rowSums(combined[,ttt==0]),
                     rowSums(combined[,ttt==1]))
    obs <- chisq.test(combtab)$stat
                 
    n.perm <- 1000
    permres <- 1:n.perm
    for(i in 1:n.perm) {
    	pttt <- sample(ttt)
        pcombtab <- cbind(rowSums(combined[,pttt==0]),
                          rowSums(combined[,pttt==1]))
        permres[i] <- chisq.test(pcombtab)$stat
    }

    # p-value
    mean(permres >= obs)