Продублировать option'ы. Первый в каждой из полученных пар будет содержать текст, отображаемый в качестве выбранного, при этом сам он должен быть скрыт, чтобы не отображаться в выпадающем списке. При выборе следует присвоить select'у его текущее значение, чтобы выбранным option'ом (т.е. тем, чей текст будет показан в select'е) вместо видимого второго оказался скрытый первый.
select.innerHTML = [
{ val: 69, optionText: 'hello, world!!', selectText: 'HELLO, WORLD!!' },
{ val: 187, optionText: 'fuck the world', selectText: 'FUCK THE WORLD' },
{ val: 666, optionText: 'fuck everything', selectText: 'FUCK EVERYTHING' },
].map(n => `
<option value="${n.val}" hidden>${n.selectText}</option>
<option value="${n.val}">${n.optionText}</option>
`).join('');
select.addEventListener('change', e => e.target.value = e.target.value);