DeleteDuplicates[SortBy[Last@# == "x" &] @ lis, Most[#] == Most[#2] && MemberQ[Last /@ {##}, "x"] &]
{{"a", "b", "c"}, {"d", "e", "f"}, {"g", "h", "i"}}
Update: A more flexible approach using SequenceReplace + OrderlessPatternSequence:
ClearAll[f] f = SequenceReplace[{OrderlessPatternSequence[ p1 : {a___, _, b___}, {a___, "x", b___}]} :> p1];
Examples:
lis = {{"a", "b", "c"}, {"d", "e", "f"}, {"d", "e", "x"}, {"g", "h", "i"}}; lis2 = {{"a", "b", "c", "z"}, {"d", "e", "f", "z"}, {"d", "e", "x", "z"}, {"g", "h", "i", "z"}, {"w", "x", "y", "z"}, {"w", "x", "x", "z"}}; lis3 = {{"a", "b", "c", "z"}, {"d", "e", "f", "z"}, {"d", "e", "x", "z"}, {"g", "h", "i", "z"}, {"q", "r", "s", "t"}, {"q", "r", "x", "t"}}; f @ lis
{{"a", "b", "c"}, {"d", "e", "f"}, {"g", "h", "i"}}
f @ lis2
{{"a", "b", "c", "z"}, {"d", "e", "f", "z"}, {"g", "h", "i", "z"}, {"w", "x", "y", "z"}}
f @ lis3
{{"a", "b", "c", "z"}, {"d", "e", "f", "z"}, {"g", "h", "i", "z"}, {"q", "r", "s", "t"}}