How could it have gone better?

Good game, I ran your game through my chess engine. Here are the moves that it didn't agree by a large share (the moves are what was suggested to be played):
7...Qb6
8...Qb6
12...Bxb4 if (13. cxb4 Qe5 (wins rook))
or
12...Nxb4 if (13. cxb4 Bd4 14. Nc3 Bxc3)
14...Be6
16...Bf5 (followed by 17...Re8 where you can recapture with your other rook)
23...Ne5
24...Bd4 (wins the knight)
On move 25, you were right. Bd4 Nxf6+ Rxf6 Bxf6 Bxh1 is just an even trade.
Great game if you are just starting out!!