Il codice va bene, l'oggetto $.Valori è non è ben definito sintatticamente.
Questo codice, ad esempio, funzione come dici tu:

Codice PHP:
<html>
    <
script>
        var $ = {};
        $.
Valori = {
            
primo:{
            
'a':'lettera A',
            
'b''lettera B',
            
'c':'lettera C'
            
},
            
secondo:{
            
a:    [ '1a''1b','1c' ],
            
b:    [ '2a''2b','2c' ],
            
c:    [ '3a''3b','3c' ]
            }
        };

        var 
lettere = ["a","b","c"];
        
        for (var 
i in lettere) {
            var 
let= $.Valori.secondo[lettere[i]]
            
alert let[0]);
        }
    
</script>
    
    <body>
    
    </body>
</html> 
Io personalmente avrei fatto così il ciclo, mi pare un pò più chiaro:

Codice PHP:
for(var 0len lettere.lengthleni++) {
    var 
let= $.Valori.secondo[lettere[i]]
    
alert let[0]);


In javascript puoi vedere un oggetto come un array associativo e possono essere creati "dal nulla" con la notazione JSON {x_1 : valore_1 [, x_i : valore_i]} dove i vari x_i sono degli identificativi e i valore_i sono oggetti (interi, float, object, array...).
Inoltre nota che gli array sono object dove, se usati come array, le chiavi sono degli interi (per questo il tuo ciclo for-in funziona).