rownum is incremented as the result set is generated.  If the value "1" is never generated, then "2" is never generated.
Because you want to return the row number, I would recommend using row_number():
select seqnum, user_id
from (select t1.*, row_number() over (order by ?) as seqnum
      from table1 t1
     ) t1
where seqnum between 2 and 4;
The ? is for the column that specifies the order of the result set.
SQL tables represent unordered sets.  So your original query is functionally equivalent to:
select (1 + rownum), userid
from table1
where rownum <= 3;
Because the ordering is not specified.  With a specified ordering, you can use row_number().
In Oracle 12C+, you can also express this as:
select rownum, userid
from table1
offset 1 row fetch first 3 rows only;