Heterograms, Palindromes, oh my!

Pyth, 17 bytes

 Z.{rzZ.q.Zzr}.Z 

Try it online here.

The leading space is necessary. I have counted it and the trailing space in the byte count.

Here's the breakdown:

     z            z is initialized to the input
    r Z           Z is initialized to 0, and r(string)0 converts the string to lowercase
  .{              .{ is pyth's builtin uniqueness test
       .q         .q terminates the program
         .Zzr}    This is just the program mirrored
              .Z  . requires a number to immediately follow it
                  If left blank the parser would throw an error
 Z                This is just mirrored from the end
                  The leading space suppresses the automatic printing of this 0
                  The trailing space mirrors the leading space

Python 3, 125

The main problem is to make the reverse of the code parsable. Then we can let it error out from undefined identifiers.

w=[str.lower][0]((input)())
(print)((max)((map)(w.count,w))<2)
(2>((w,tnuoc.w)(pam))(xam))(tnirp)
(()(tupni))[0][rewol.rts]=w

Perl, 43 bytes

print+m:^(?!.*(.).*\1|1/*.(.)*.!?)^:m+tnirp

Usage example:

echo "abcde" | perl -n entry.pl