Python 2, 136132 bytes
Saved 4 bytes thanks to @alleks!
s=''
for i in range(32,128,16):s+=' '.join(map(chr,range(i,i+16)))+'\n'
s=s[:-2]
while 1:print s;i=2*ords[:-2];i=2*ord(input())-64;s=s[:i]+' '+s[i+1:]
Python 2, 136 bytes
s=''
for i in range(32,128,16):s+=' '.join(map(chr,range(i,i+16)))+'\n'
s=s[:-2]
while 1:print s;i=2*ord(input())-64;s=s[:i]+' '+s[i+1:]
Python 2, 132 bytes
Saved 4 bytes thanks to @alleks!
s=''
for i in range(32,128,16):s+=' '.join(map(chr,range(i,i+16)))+'\n'
while 1:print s[:-2];i=2*ord(input())-64;s=s[:i]+' '+s[i+1:]
Python 2, 127136 bytes
s=''
for i in range(32,128,16):s+=' '.join(map(chr,range(i,i+16)))+'\n'
s=s[:-2]
while 1:print s;i=2*ord(input())-64;s=s[:i]+' '+s[i+1:]
Python 2, 127 bytes
s=''
for i in range(32,128,16):s+=' '.join(map(chr,range(i,i+16)))+'\n'
while 1:print s;i=2*ord(input())-64;s=s[:i]+' '+s[i+1:]
Python 2, 136 bytes
s=''
for i in range(32,128,16):s+=' '.join(map(chr,range(i,i+16)))+'\n'
s=s[:-2]
while 1:print s;i=2*ord(input())-64;s=s[:i]+' '+s[i+1:]
Python 2, 127 bytes
s=''
for i in range(32,128,16):s+=' '.join(map(chr,range(i,i+16)))+'\n'
while 1:print s;i=2*ord(input())-64;s=s[:i]+' '+s[i+1:]