However, what should I do if I want to further engineer the imputed data? It sound unlikely to run each line of code multiple times for each dataset.
It might "sound unlikely to run each line of code multiple times for each dataset," but that would be the way to proceed.
Multiple imputation provides an important advantage over single imputation, as it directly incorporates the uncertainty in the imputation process. So if you want to take advantage of that benefit of multiple imputation, then you need to go through your further "engineering" of each imputed data set independently. That might not end up being a big practical problem, as depending on your application a dozen or so imputed sets can sometimes be adequate.
The above assumes that the further "engineering" depends on values that you impute; if "engineering" can be done on the incomplete data, then that would be OK before imputation. But if you hold off on "engineering" until after results are pooled, the step from "analysis results" to "pooled results" would not incorporate the uncertainty in the engineered values.