Golden rule with children of all ages - never take their words or deeds personally. When they lash out, it's either because they don't understand what they are saying, or because they know those words will get a reaction, or they are saying something to hurt you because they are hurting so badly themselves and they think that if they get it out then maybe you will understand. Either way, it's not about you.
I agree, it was a bad day. Put it behind you. If you're interested, I also have some advice/ideas about how to handle discipline with toddlers in general. If not then just skip the rest of my post. It's just that a lot of this helped me and I pass it on in the hope that it might help somebody else. It's really not intended as a criticism.
I think that perhaps your expectation for him to spontaneously apologise is a bit high. At his age (especially if his FCs were so lenient!) he won't understand what an apology is or why somebody might want one. If you really want the apology, then you have to tell him what to say and do (for example some people expect a hug). If you want him to learn why we apologise, then you have to explain it to him. At his age you will have to explain every time it happens because it takes a lot of repetition for something to sink in.
If you want the apology to come from him and be genuine, then (in my opinion) it's better not to force it. But you can still explain that it's nice to apologise to somebody when we've hurt or upset them, because it tells them that you didn't really mean it and that you're sad they are upset. And also that it can help make people feel better. With just an explanation it will probably take longer for him to actually come up with the "Sorry" but it can mean so much more, and you'll know it's real and he's not just saying the word because he's been told to. However, some people feel that it's better to teach them to say it first so that it comes easily/naturally even if they don't understand the meaning until they are older. Whichever way you go is up to you.
With boundaries, it's perfectly possible to enforce boundaries without relying on extrinsic rewards and punishments. This might be a good way to go with him at the moment. That doesn't mean that you avoid anything which looks like a punishment, just that the boundary enforcing is self-contained and doesn't infringe on other things. For example, when walking beside a road, always take a pushchair with you and/or a set of reins (whichever works for you - DS wouldn't walk if I put reins on him) You start off with a low-medium level of freedom like holding hands and/or having the reins on. If he's walking well, holding hands without pulling, not trying to run off, listening to instructions etc, then after a good while of this you can loosen the freedom a bit. However if he's resisting holding hands, running off, ignoring instructions, pulling etc then the freedom gets restricted a little bit. The reins go on, or he has to sit in the pushchair, or hold hands, or whatever. The tightest level of freedom has to be totally safe so that even if he is having a screaming tantrum you know there's no way he could get onto the road. Also, always take the freedom back a level where there's an extra danger, like crossing a road, walking on a very narrow pavement, perhaps being in a shop where there are things to touch/break, etc.
The most important thing with this kind of boundary enforcement is that you never threaten or impose a different punishment (e.g. If you don't hold my hand nicely then we won't get sweets at the shop) and you never threaten the loss of freedom for non-related things (e.g. stop making that noise or you can go in the pushchair). This keeps the consequence/reward directly linked to the particular behaviour. The road example is an easy one but if you think about it you can apply this kind of thing to almost any behaviour. The only one I have struggled with is cheekiness/rudeness in general which doesn't have an obvious one and is the thing I now use what I call a "generic", ie, not directly related punishment for. However, you don't have to worry about this yet! At his age it's enough just to tell him "we don't say things like that" and model kind ways of talking/being, which I am sure you do without thinking about it.
I hope that you decide not to leave the forum. It can take a bit of getting used to the tone at times but generally people mean well and are trying to help when they offer advice. (Plus, you did post in AIBU also known as the "Vipers' nest!" :)) I have certainly found a wealth of information and support here - it would be a shame to leave. For more balanced and perhaps constructive replies you could try posting in the "Parenting" or "Behaviour/Development" boards or there is actually a board for "Adoption" as well although of course you're welcome to post on any part of the forum that you like. But you may find replies are less hostile outside of AIBU.