You can do this - the key is in the syntax:
UPDATE
SET
FROM
WHERE
So, I think this is what you are looking for:
update publishers
set state = case when publishers.country LIKE ('USA') then '11' else publishers.state end,
city = case when publishers.pub_id = '8888' then '22' end
from publishers inner join pub_info on (publishers.pub_id=pub_info.pub_id)
where publisher.country <> 'FLAPDROL' OR
publishers.pub_id = '9999'
Note that the "publishers" in the FROM clause is the SAME (as in the exact same, not a copy as it is in a self-join) as the one in the UPDATE clause.
And I know you gave this just as an example, but when you are setting the city, if the pub_id isn't 8888, then it will set the city to be NULL (there is no "else" clause there).
Hope this helps!
Chad