Things to consider include:
1) Kernel hooks in your app: any calls made to the Windows Server 2003 kernel will likely break, as Microsoft made changes to the kernel in Server 2008 and again in Server 2012.
2) 32-bit apps. Microsoft retained 32-bit compatibility in Server 2008 with the WOW64 add-on layer. Server 2008 is innately a 64-bit operating system, so you have to add the WoW64 execution layer. Server 2012 supports WoW64 but has many restrictions on 32-bit apps, such as locking it out of the Registry.
3) Obsolete/abandoned apps: It's one thing if you have SQL Server 2005 running on a Server 2003 machine. Microsoft can help with that migration. But if the company that built your app has gone out of business or no longer developers that app, you have to find an alternative and migrate data to that.
4) 16-bit dependencies: You can get 32-bit app support on Server 2008 and Server 2012 but there is no backwards compatibility with 16-bit apps.