PowerShell returns everything that is not assigned to variable from function and not only statement after return keyword.
In your code it will also add result of this calls:
$obj | Add-Member -MemberType ScriptMethod -Value { return 'Hello from method 1' } -Name Method1 -PassThru
$obj | Add-Member -MemberType ScriptMethod -Value { return 'Hello from method 2' } -Name Method2 -PassThru
to function return.
To avoid this you can replace this lines with code (just adding [void] cast of call result):
[void]($obj | Add-Member -MemberType ScriptMethod -Value { return 'Hello from method 1' } -Name Method1 -PassThru)
[void]($obj | Add-Member -MemberType ScriptMethod -Value { return 'Hello from method 2' } -Name Method2 -PassThru)
after that it will work as expected.