Short answer: it is not something you decide according to your mood. It depends how much you care your e-mails get delivered (compared to how much effort you can put on development).
To send an e-mail is a trivial programming task but to get it delivered is a completely different story.
Think about this (shortened) list of possible issues:
- Mail server for your hosting solution has a limit on how much e-mails you can send.
- E-mail is sent but destination no longer exists. In this case you have (assuming your're using a dedicated mailbox) to also read incoming messages, parse them (there isn't an unified, standardized format for this) and detect which e-mails didn't get delivered.
- As a plus of above point also note that one e-mail may be delivered but another one not, you have to check this in message headers.
- Mail servers often uses a trusted list to detect spam. If you send thousands e-mails and you're not in their trusted list then you (or your server) may be tagged as spammer.
- Errors may be temporary (mailbox full) then you should reschedule a delivery later or permanent (destination unavailable). You have to handle both.
- After everything is done you have to give a feedback (you tried to send 100 e-mails, 95 has been delivered, click here for details).
Of course this can be done (it's what professional e-mail automation services do) but it costs time (a lot) and effort (a lot) then money. Of course if an occasionally lost e-mail is not an issue then you can roll your own solution (it's what I do 95%) but when it's not enough then you have to move to those services. Also note that they usually expose (hopefully) nice API you can use.
Your two example are pretty different so I'll discuss them separately.
For example: "As a user, I want to invite in a friend to this product and expect my friend to receive an invitation email so that they can register"
In this case you may accept that invitation is lost (especially because it seldom happens). Your own mailing code is probably easier and cheaper. If your friend didn't receive anything then you may simply send invitation again. Note that your e-mail address may be targeted to receive a delivery receipt and/or a read receipt.
"As a user, I want to change my email address and password within the application so that I can receive app related emails and secure my account."
In this case a professional service is not mandatory (IMO) but it may help. Also note that (for this case) they may need to grant a maximum delivery time.
From User Experience point of view nothing is more frustrating than ask, for example, for a password recovery e-mail and wait until the other day to get it (it did happen and I seriously considered to stop using that service). Also ghost e-mails will seriously notch your credibility with your customers then you have to balance effort+price+required reliability.
To summarize: unless you have other reliability requirements, I would go with that services if you have to batch send hundreds/thousands marketing e-mails (for the reasons I explained above). For every day usage you may not need their services (especially if fee is not fixed).