Normalizing data for joins, dedicated columns, a view or.. something else?
There is no generic best solution, normalization is a trade-off between time, space, redundancy and its consequences.

Given your use case is to see a user, his current job and his current house, the original model is fine. And I think the SEQ column is unnecessary.

SEQ and LAST_UPDATE columns are redundant, they both contain information about a change. SEQ simply represents a change number, but LAST_UPDATE even contains the date of change. The number of changes can be simply found by counting rows for a specific USER_ID, so unless you have multiple changes in a second (the smallest unit a DATE type can store), the SEQ column is not mandatory, and USER_ID, LAST_UPDATE could be the PK. The query you write is very real, I have seen queries like that a lot of times, but you can do even better with analytic functions:

SELECT U.USER_ID,
       U.DESCRIPTION,
       UJ.JOB_ID
  FROM USERS U, 
  ( SELECT JOB_ID 
    FROM (SELECT JOB_ID, ROW_NUMBER() OVER (PARTITION BY USER_ID ORDER BY LAST_UPDATE DESC) as R FROM USER_JOBS)
    WHERE R = 1
  ) UJ
 WHERE U.USER_ID = UJ.USER_ID AND U.USER_ID = :B1;