scikit-learn indeed strips the column headers in most cases, so just add them back on afterward. In your example, with X_imputed as the sklearn.preprocessing output and X_train as the original dataframe, you can put the column headers back on with:
X_imputed_df = pd.DataFrame(X_imputed, columns = X_train.columns)