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
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
The advantage of this version is that it also works in sh (the -u option for read doesn't work in sh).