Easy enough.
CloudFront supports multiple origin servers, and uses path patterns to determine which origin server to forward the requests to... so multiple, independent backend systems, even systems that aren't inside AWS, can all "own" one or more paths under a single hostname, with one of them being the default and owning all the paths not explicitly configured.
This is probably similar to what you have read about Nginx or Apache (and can also be done with HAProxy and others), but the request routing is done by CloudFront, which connects to the appropriate back-end, sends the request, and returns (and possibly caches) the response.
It does not redirect, so the browser address bar never changes.
The caveats:
CloudFront won't strip paths, so /blog*
routes requests to bloghost.example.com
then bloghost has to have its content under the /blog
path, not in the root of the site.
CloudFront forwards very few headers to the origin by default. You can configure it to forward what you need, but every header you forward will reduce your cache hit ratio. There are very sound reasons why this is true, though beyond the scope of this answer. You need to identify which headers wordpress needs, and whitelist them in CloudFront.
You will also need to configure CloudFront to forward query strings and cookies, since, again, it doesn't forward those by default.
See also:
https://stackoverflow.com/a/38709097/1695906
https://serverfault.com/a/729706/153161
https://stackoverflow.com/a/32364600/1695906