Looking at the decompiled code of Send Email Action it uses CMS.EmailEngine.EmailSender.SendEmail(..) method internally. It means that if you have email queue enabled, it will evaluate the email message content one time (resolving all macro methods), and insert this message in the queue. Send emails task then will pick this email message from the queue and attempt to send. If it fails, it will retry according to the email queue setting specified. For each send attempt it will not re-evaluete macros in your email. Email queue stores compiled and ready to be sent email messages with all macro methods resolved.
To answer your first question, when email is added to the queue Kentico treats it as sent and goes to the next step. In reality, yes, the email may bounce but Marketing Automation will treat it as sent. As you can see, Send Email action is not conditional and contains only one outgoing connector meaning there is no way you can handle negative email send result.
Additional bulletproofing here however possible I think, but will require quite some effort: you can use conditional actions and send emails from your custom macro methods that will return true only in email is 100% sent. It's up to you but feels like unnecessary overcomplicating things.