Научились ли программы использовать все процессорные ядра?
It depends. 
Блокнот как не умел паралеллиться на 16 ядер так и не умеет.
3dsmax как грузил все ядра, так и сейчас грузит.
Всё зависит от вас и от ваших задач :)
Программы могут использовать сколько угодно ядер, если можно распараллелить алгоритм работы. Но тут еще все зависит от ОС - как она раскидает потоки/нити по ядрам. Может вообще 4 однопоточные программы будут раскиданы по разным ядрам, и будет все работать быстрее чем на 1 ядре.
Сугубо из личного опыта: gcc можно запускать с разным количеством потоков, и на 8 ядрах (виртуально) компиляция идет в разы быстрее чем на 4 (виртуальных).