TRY/CATCH only reports the last (and most useless) error (This is SQL Server 2016 SP2-CU12.)
When running this command interactively, I see the quite useful Msg 3035, Level 16, State 1.
BACKUP DATABASE @DB TO DISK = @targetfile
WITH DIFFERENTIAL, RETAINDAYS = 2, COMPRESSION,
NAME = @buname, STATS = 4

Msg 3035, Level 16, State 1, Line 4
Cannot perform a differential backup for database &quot;ReportServer&quot;, because a current database backup does not exist. Perform a full database backup by reissuing BACKUP DATABASE, omitting the WITH DIFFERENTIAL option.
Msg 3013, Level 16, State 1, Line 4
BACKUP DATABASE is terminating abnormally

But when running it within a TRY/CATCH block, all I get is the Generic Msg 3013, Level 16, State 1.  How do I see the specific and useful message Msg 3035, Level 16, State 1?  The goal of my task is to test the ERROR_NUMBER(), ERROR_SEVERITY() and ERROR_STATE() values and programmatically perform a full backup when Msg 3035, Level 16, State 1 occurs, but not when  Msg 911, Level 16, State 11 Database 'XXX does not exist. and Msg 3201, Level 16, State 1, Line 4 Cannot open backup device 'xxxx'. Operating system error 3(The system cannot find the path specified.). errors happen.
begin try
    BACKUP DATABASE @DB TO DISK = @targetfile
    WITH DIFFERENTIAL, RETAINDAYS = 2, COMPRESSION,
    STATS = 4
end try
begin catch
    SELECT ERROR_NUMBER() AS ErrorNumber,
            ERROR_SEVERITY() AS ErrorSeverity,
            ERROR_STATE() AS ErrorState
            , ERROR_MESSAGE() as ErrorMsg; 
end catch

ErrorNumber ErrorSeverity ErrorState  ErrorMsg
----------- ------------- ----------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
3013        16            1           BACKUP DATABASE is terminating abnormally.

(1 row affected)
You can try using THROW to get the full exception raised:

If the THROW statement is specified without parameters, it must appear
inside a CATCH block. This causes the caught exception to be raised.

begin try
    BACKUP DATABASE @DB TO DISK = @targetfile
    WITH DIFFERENTIAL, RETAINDAYS = 2, COMPRESSION,
    STATS = 4
end try
begin catch
    SELECT ERROR_NUMBER() AS ErrorNumber,
            ERROR_SEVERITY() AS ErrorSeverity,
            ERROR_STATE() AS ErrorState
            , ERROR_MESSAGE() as ErrorMsg; 
    THROW;
end catch

Result

Msg 3035, Level 16, State 1, Line 8 Cannot perform a differential
backup for database &quot;...&quot;, because a current database backup does
not exist. Perform a full database backup by reissuing BACKUP
DATABASE, omitting the WITH DIFFERENTIAL option. Msg 3013, Level 16,
State 1, Line 8 BACKUP DATABASE is terminating abnormally.