I basically want to create a custom dialog component that I can utilize from anywhere in my Angular2 app regardless of where the using component is in the application tree.
An alternative to using a service is dynamically creating the component using ViewContainerRef/createComponent described here:
https://www.lucidchart.com/techblog/2016/07/19/building-angular-2-components-on-the-fly-a-dialog-box-example/
As mentioned in a comment above,
To wrap an Observable in a service, see this answer.