Your first example will exit immediately because you don't call any of the WaitForExit functions. Process.Start starts a process but doesn't stick around until it ends.
Your second example is a little more nuanced. There are 2 probable scenarios
Steam is not already running: In this case your Process.Start will launch steam with an argument requesting it start your game. However, Steam stays resident and doesn't quit with the game. So your WaitForExitAsync will wait until Steam itself closes down.
Steam is already running: In this case you start a 2nd copy of steam. In my experience, the 2nd copy looks around and realizes that Steam is already running so it hands off your request to the already running copy and then immediately exits.
In most (all?) cases you can find the actual game executable and launch it directly (for example, I can find many of my steam games in C:\Program Files (x86)\Steam\steamapps\common\<Name of Game>. If you find the appropriate .exe file and launch it directly you can probably achieve what you want.
Note that if Steam launches the app with command line arguments you may need to replicate those in your program. You can discover the arguments in the Details pane of the Task Manager if you enable the "Command Line" column