Max7219 con funcion shiftOut no LedControl. Punto decimal

Lo primero que te diré será que leas las normas del foro. Esta vez lo edité yo para poder entender tu consulta y leerlo apropiadamente.
La próxima no será asi!! Asi que presta atención, mira y lee otros hilos y aprende como se postean códigos, enlaces, fotos/imágenes, etc.

Para controlar el punto decimal solo escribe en el MSB o sea el bit mas significativo
Supongamos que quieres hacerlo en us que ya calculaste

us = (over / 1000)%10;

asi que solo agregas esto

us |= 0b10000000;

y mi respuesta surge de analizar LedControl.h ya que cuando miras

void LedControl::setDigit(int addr, int digit, byte value, boolean dp) {
    int offset;
    byte v;

    if(addr<0 || addr>=maxDevices)
        return;
    if(digit<0 || digit>7 || value>15)
        return;
    offset=addr*8;
    v=pgm_read_byte_near(charTable + value); 
    if(dp)
        v|=B10000000;       // <== CONTROL PUNTO DECIMAL
    status[offset+digit]=v;
    spiTransfer(addr, digit+1,v);
}

Respecto de que montaje electrónico usar, mira cual te resulta mas cómodo y adelante.
La opcion dos parece mas cómoda y menos compleja que disponeter de tantos transistores para la tarea. De alguno modo es mas limpia la 2da.
La 1 de acuerdo a que transitores uses, te permite superar corrientes y tensiones. Tiene sus ventajas pero para 12V 600mA usaría la 2.