Sorry I didn't see this post earlier, I hope I can help a bit. sounds like you have been through enough already
When you say he sleeps about 9hours/day, that is 9 hours in 24??? so he is chronically overtired
I think part of the problem is your lo is too overtired & is suffering "insomnia", at 3 months after "trauma" form major surgery, I would thing that an hour of awake time (that includes feeding) would be about right... so at about 55mins from awake time start to give him a wind-down routine. change nappy then sit & cuddle sing songs or something like that in a quiet place. then if you swaddle do that then put him on your shoulder & pat him until he wriggles, then put him in his bed & only pat & sh if he is upset, otherwise leave him be & go back if he gets upset.
Once you have him sleeping better, I would then try to increase the awake time to about 1.5hours (normal for a 3mo) but in the mean time, if you can't get him to sleep take him for a walk in the stroller, or a drive in the car if you can, what you need to do is ANYTHING to get him more rested. If he isn't sleeping, feed him every 3 hours, but keep things as low key as you can.
HTH