JSX is just sugar that translates into a bunch of React.createElement function calls that you can find here for the documents: https://facebook.imtqy.com/react/docs/top-level-api.html#react.createelement
ReactElement createElement( string/ReactClass type, [object props], [children ...] )
Basically your JSX is moving from
<div style="color: white;"> <div></div> </div>
to
React.createElement('div', { style: { color: 'white' } }, [ React.createElement('div', {}, []) ])
For the same reason, you cannot pass a loop to a parameter in a function, you cannot put a loop in JSX. It would look like
React.createElement('div', { style: { color: 'white' } }, [ React.createElement('div', {}, for (;;) <div></div>) ])
which makes no sense at all, because you cannot pass a for loop as a parameter. On the other hand, calling the map returns an array, which is the correct type for the third parameter of React.createElement.
The response is still the dom virtual library at the end of the day, but JSX just makes it more familiar to write. hyperscript is another good example of the vdom library, but where JSX not standard. Their README example is similar to what React would look like without JSX:
var h = require('hyperscript') h('div#page', h('div#header', h('h1.classy', 'h', { style: {'background-color': '#22f'} })), h('div#menu', { style: {'background-color': '#2f2'} }, h('ul', h('li', 'one'), h('li', 'two'), h('li', 'three'))), h('h2', 'content title', { style: {'background-color': '#f22'} }), h('p', "so it just like a templating engine,\n", "but easy to use inline with javascript\n"), h('p', "the intension is for this to be used to create\n", "reusable, interactive html widgets. "))