Caesar Cipher Guesser
First comment - "Import Statements" - is unnecessary.



I would add few empty lines to make code more readable - ie. before return, for



Document PEP 8 -- Style Guide for Python Code suggest to use UPPER_CASE_NAMES for constant values - WORDS and CHARS you can treat as constant values but ROTATIONS, ENCODED, DECODED, GUESS,GUESSES` are not constant values.



Instead of range(len(..)) in

for index in range(len(text)):
    new_position = ord(text[index]) - (rotations % 26)


you can iterate list

for char in text:
    new_position = ord(char) - (rotations % 26)




There is similar situation in other loop. 

for i in range(len(guess)):
    if guess[i] == DECODED[i]:
        response += guess[i]


But here you need i to get DECODED so you can use enumerate() 

 for i, char in enumerate(guess):
    if char == DECODED[i]:
        response += char
    else:
        response += " "




You can calculate rotations % 26 only once - before for loop.