Instead of using redirection, you can open file.txt to a file descriptor (for example 3) and use read -u 3 to read from the file instead of from stdin:
exec 3<file.txt
while read -u 3 line; do
echo $line
read userInput
echo "$line $userInput"
done
Alternatively, as suggested by Jaypal Singh, this can be written as:
while read line <&3; do
echo $line
read userInput
echo "$line $userInput"
done 3<file.txt
The advantage of this version is that it also works in sh (the -u option for read doesn't work in sh).