Note: The PowerShell SDK documentation is terse, so the following is speculative.
An instance of the PowerShell class is a wrapper for a runspace, the container in which a PowerShell session runs; its .Runspace property returns the enclosed runspace.
You need a runspace (Runspace instance) in order to create and execute a pipeline for executing arbitrary PowerShell statements.
To create a pipeline, you have two options:
If you have a PowerShell instance, you can use its convenience methods such as .AddScript() to implicitly create a pipeline.
Alternatively, use a runspace's .CreatePipeline() method to create and manage a pipeline explicitly.
Simply put: The convenience methods of the PowerShell class allow simpler creation and execution of pipelines.
Note that both approaches support executing multiple statements, including any mix of commands (e.g., cmdlet invocations such as Get-Date) and expressions (e.g.,1 + 2).
The following snippet compares the two approaches (using PowerShell itself), which are functionally equivalent, from what I can tell:
# Create a PowerShell instance and use .AddScript() to implicitly create
# a pipeline that executes arbitrary statements.
[powershell]::Create().AddScript('Get-Date -DisplayHint Date').Invoke()
# The more verbose equivalent using the PowerShell instance's .RunSpace
# property and the RunSpace.CreatePipeline() method.
[powershell]::Create().RunSpace.CreatePipeline('Get-Date -DisplayHint Date').Invoke()
There may be subtleties that I'm missing; do tell us, if so.