Looking at the documentation of REST API and outlook client library it seems the REST API only support creating/sending TEXT or HTML body in the request but not both.
Would be nice if someone can confirm this. Does the API provide a way to encode HTML and plain text bodies?
No, the API doesn't support this. You set either one or the other, and the server creates an equivalent "other" for clients that support/request it.