What slicer are you using? The standalone Slic3r has a tooltip on the Start Gcode field (that displays when you hover the mouse over it) that reads, in part:
If Slic3r detects M104 or M190 in your custom codes, such commands will not be prepended automatically so you're free to customize the order of heating commands and other custom actions
The implication is that you need to include M104 and M190 in your start gcode to
prevent Slic3r from prepending its own M104 and M190 commands. If you set your hot end temperature using M104 and THEN pass it an M109 command (with or without the temperature specified) to wait until it reaches temperature, Slic3r will not insert the extra M104 and it will do your commands in the desired order. That's how I have my Rostock start gcode configured and it's working for me.
Incidentally, if you're using the same temperature across the board it doesn't matter, but it would technically be more correct to use the [first_layer_bed_temperature] and [first_layer_temperature] variables.
For the waiting for user input, you're going to be sitting by the machine anyway. The way I handle it is to manually set the temperatures that I'll be using (this can be done either in your host software or using the LCD) and launch the print when the temperatures are stabilized, with or without a manual purge and extrudate removal.