firstly when a database is marked as suspected
There may be other reasons but the most common one is when you have some issue with data file or log file of database and it goes through crash recovery after SQL Server is restarted, since SQL Server will not be able to recover the database due to corrupt, incorrect or missing information in one of the files(data or log) it has to mark database as suspect. Learn how to make database suspect (only for testing purpose. It goes without saying that please do not try this on Prod and even UAT).
secondly when we use emergency mode.
In any case where you want to gain access to contents of database but are not able to because it has been marked suspect. You can then put database in emergency mode which is "inconsistent database" provided to you without fully doing crash recovery. Please note you might not always be successful.
Are they rolled back normally?
When you use emergency mode you have lost all possibility to bring database online so you force it to "kind of come online with inconsistent data" using emergency mode. When you do so no recovery happens and you are just given read access to inconsistent database. After this when you run checkdb with
repair_allow_data_loss then all kinds of actions are taken to bring database online in consistent state, to do so
repair_allow_data_loss will remove any such thing which might block database to come online.
Putting database in emergency and then recovering it should not be treated as method to solve suspect database issue. Restoring from good backup should be the preferred way.
Would also suggest you to read Paul Randal blog