In theory it could work, but I think that's error prone, you'd need to parse statements and their parameters, and concurrency could play a role in data consistency depending on your transaction isolation levels, etc. If any of the statements fails for whatever reason, you can't just skip them if you are to guarantee consistency, pgpool works by doing what you suggest but all PG versions must be the same.
If I upgrade Postgres from V9.3 to V10, then need to roll-back to V9.3 after data been entered, is there a way for me to save the new data so that I can re-apply it to the V9.3? After I restore my V9.3 backup, can I simply replay the V10 log unto V9.3? What are my options, if any?