splitting a string list
StringSplit[#, WhitespaceCharacter... ~~ n : NumberString :> n] & /@ lis
{{{"a (b)", "1"}, {"c", "2"}}, {{"d", "3"}, {"e f", "4"}}}
Here's an equivalent to kglr's solution, using replacement and regex:
{{"a (b) 1", "c 2"}, {"d 3", "e f 4"}} /.
s_String :> StringCases[s, RegularExpression["(.+) (\\d)$"] :> Sequence["$1", "$2"]]
{{{"a (b)", "1"}, {"c", "2"}}, {{"d", "3"}, {"e f", "4"}}}