Short answer: it gets converted to native, they can actually determine which parts of the .NET runtime you are using and only fold those elements in which makes the IPA pretty small actually.
The IL linker operates over the IL code (typically C# produced, but we are working now on adding also F#) and produces the minimal set needed to run.
Then we compile the resulting linked IL to ARM code, and then we run the result using the C linker (so the same removal of unused code takes place, this time for the C bits of Mono).
There is no virtual machine.