Without seeing more of your code, it's hard to know for sure, but based on what you report it sounds to me as if you have, in effect, tied the update of the emulator to the display.
Generally, that's a Bad Idea, you'll probably want to allow the emulation to run at the "correct" speed, and have the update of the display run asynchronous to that.
In this case, my experience suggests that Apple (and indeed most manufacturers) tie their "default" display refresh rate to the monitor frequency of their laptops (likely 60Hz in an Apple laptop) and so if your emulation is tied to that, that's going to constrain how fast it runs.
Display updates to an external display may well be (and often are) "free running" and so will not be constrained by the monitor refresh rate (and indeed the external monitor may well have a higher refresh rate anyway...)
You can try an experiment with the fractals demo from the test folder, see what FPS it reports on each of the monitors - that (I suspect) may show a similar disparity.
But the main tip would be *not* to tie the running of the app to the refresh rate of the display.
The display only *needs* to update slowly, in human timescales, whereas you want your application to run fast in "computer" timescales...