Ah figured out my first issue. I need to call Output.All to make sure the values are available. That's why some were missing.
I did find out you cannot return an object itself. Looks like there is an open issue for this.
https://github.com/pulumi/pulumi/issues/3690
My workaround is to just serialize the object into a json string and then the sack that needs it can just deserialize the object.