Here's how I would make a block to do that. This screenshot is from Blockly Developer Tools. It has a numeric input field to grab the wait time, and a statement input to get the actions that should be inside the setTimeout. It only has a previousConnection, so you can't add actions that come after this that are outside of the setTimeout.
A for loop is really the same concept. You have some collection of statements and you want to wrap them in additional code (i.e. add the for loop syntax surrounding the stack of blocks). So using something that works in a similar way makes sense to me.
Would a block like that work? If not, I think you'd have to resort to some kind of hack like checking if any of a block's parents are your special block, and changing the code generation for all other blocks to take that into account, but if you have a specific problem with the block design like I've shown here then maybe we can help you work around that problem.