Why is the word folks sound like it’s pronounced [foʊks] rather than [fɔɫks]? It’s as though people are thinking it’s spelled fokes.
This is the result of historical loss/vocalization of the sound /l/ in certain contexts. As Max Williams mentioned, we also see this loss in -alk words like walk, talk, chalk, balk, stalk. Some American English speakers have restored the /l/ in some of these words as well as some other words that traditionally have silent /l/ (like the -alm set). (I don't know if any speakers have retained the /l/ via continuous transmission from some accent that didn't have this sound change.)
The word yolk shows the same phenomenon.
The pronunciation of "olk" in non-Germanic words, and proper names is somewhat variable. The Oxford English Dictionary gives pronunciations with /l/ for "polka" in both British English and American English (although they usually have different vowel qualities), as well as an l-less pronunciation for American English speakers only.
For comparison, phonemically vault is /vɔlt/, wolf is /wʊlf/, and bolt is /bolt/, but how words like those actually get pronounced varies a great deal.
One thing that’s common is for /l/ in the coda to becomes not merely [ɫ] but all the way to [w], which creates a phonetic (but not phonemic) diphthong. That’s what’s happening here.
The l is silent. I don't think I've ever heard anyone pronounce the "l", anyway. See also walk, talk, chalk, stalk, half, calf, could, should, would and probably many more.
As to "why do we have these silent letters?" - the language changes all the time, and pronunciation changes faster than spelling. It's inconsistent.