The reason you can do INSERT INTO .... SELECT ...this is because it is SELECTused as input to the request INSERT.
INSERT . , :
INSERT INTO UserTable VALUES (...)
INSERT INTO UserRoles VALUES (...)
DELETE FROM Requests WHERE ...
, :
BEGIN TRAN
INSERT INTO UserTable VALUES (...)
INSERT INTO UserRoles VALUES (...)
DELETE FROM Requests WHERE ...
COMMIT
, ID . , UserTable IDENTITY, SCOPE_IDENTITY:
BEGIN TRAN
INSERT INTO UserTable VALUES (...)
DECLARE @UserID INT
SET @UserID = SCOPE_IDENTITY()
INSERT INTO UserRoles (UserID, RoleID) VALUES (@UserID, ...)
DELETE FROM Requests WHERE ...
COMMIT