Mixing audio in a microprocessor
Adding 8 samples together only requires 3 extra bits.

After adding the samples together to get the mixed signal, divide by the number of samples.  That is always guaranteed to fit into the original word width, although the sum needs to be wider.  Specifically, the accumulator needs Log2(samples) more bits than each of the samples.  Note that dividing by 2N is just shifting right by N bits.  To get the average of 8 samples, add them up, then shift the result right 3 bits.

This kind of arithmetic is what DSPs are intended for.  They have accumulators you can add into that are wider than regular data words.  They also generally can shift the result a arbitrary number of bits in a single instruction cycle.

You said your original samples might be only 12 bits.  In that case, you can add up to 16 of them without overflowing a 16 bit word.  That might be good enough for your purposes.