sqlite still won't do cross-table updates (stuff like update b from table1 b join table2 a on....), but there is that lame replacement:
update b set b.f1 = (select f2 from a where a.f3=b.f3)
which of course has the side-effect of setting b.f1 to null where there isn't a corresponding record in a.
However, despite the magic that controls which rows actually get updated, the (select ...) bit is still just an expression like in standard SQL. Which means it can be an argument to coalesce():
update b set b.f1 = coalesce((select f2 from a where a.f3=b.f3), b.f1)
While this isn't ideal it does solve the null problem.