+1 to liftData
Removing 'Lift' altogether definitely isn't the way to go, though. As Richard points out, we want to be able to lift more than just ADTs. Also ADTs which hide their implementation can have either opaque Data instances, no Data instance, or Data instances which involve using functions for constructors.
An example of the latter is Data.Map.Map's Data instance, which uses 'fromList' as a constructor. This results in $(dataToExpQ (\_ -> Nothing) (fromList [(1,2)])) causing the compiletime error "Illegal data constructor name: ‘fromList’".
I think 'dataToExpQ' and related functions should be modified to handle this case. It should be rather easy - if the constructor Name is lowercase, generate a 'VarE' instead of a 'ConE'. I suppose this is a separate proposal, but it came up when thinking about this proposal.
-Michael