What is the request_id in sys.dm_exec_requests and how does it change?
Can someone tell me how, for a given session, this id can ever be more
  than 0? Is it possible to reproduce this with some sql?


The request_id other than zero indicates a connection with Multiple Active Result Sets (MARS) enabled.  With MARS, a single connection may have multiple active statements, with statement execution interleaved.

From SSMS, open a new query window connection specifying MultipleActiveResultSets=Trueunder "Options-->Additional Connection Parameters".  Then run the query below in the window.  You should see a non-zero request_id value.

SELECT * 
FROM sys.dm_exec_requests
WHERE session_id = @@SPID;