When manually unpacking a program and ending up at the OEP, then why do we have to rebuild the import table? I understand that when packing, the import table is destroyed for compression/stealth, but if we're already at the OEP, it must mean the program is ready to roll because the unpacking stub has repaired the import table already? Otherwise it would just crash at the first external call.
Why isn't the import table ready at OEP?
unpacking;iat;import reconstruction
if we're already at the OEP, it must mean the program is ready to roll  because the unpacking stub has repaired the import table alreadyNo, by the time the OEP is reached, the unpacking stub has populated the Import Address Table; it hasn't repaired the Import Table. You need to reconstruct the Import Table so that when you run the unpacked program, the Windows loader will populate the Import Address Table at runtime (with the correct function addresses at runtime) based on the data in the Import Table.(Note that there are always exceptions, but this is typically true for most packers.)