if letter == guess:
display[position] = letter
if guess != chosen_word:
lives -= 1
1. If the letter is correct then you display it, but the word is still not complete.
2. You always check if the guess matches the chosen word. So even if the letter was correct the word does not match until you have all letters.
You need to rethink the choices and options. The word cannot be correct until you have all letters correct. However that could take forever, since even with short words there are plenty of letter choices. Maybe you should keep a count of the wrong letters rather than the word, and allow only some number of retries based on the word length. Perhaps three tries for each letter. Something like:
for position in range(word_length):
letter = chosen_word[position]
if letter == guess:
display[position] = letter
else:
lives -= 1