grep -iwr Jill ~/home/*|sed -i 's/Jill/Joan/g'
This won't work since the output of grep is piped directly into the sed command: this means that the list of file names and the matching lines are processed by the stream editor (not the files themselves). You can use xargs, but the output of grep should be limited to the file names (option -l)
grep -lwr Jill * | xargs sed -i 's/Jill/Joan/g'
See man xargs for details.