Substitute Carpenter combined with Wieke Kaptein for the 51st minute goal which broke Roma's resistance at Plough Lane.
And central defender Buchanan wrapped up the win in the 89th minute, ensuring a second win in three European matches for Sonia Bompastor's unbeaten team.
Chelsea were on top in the first half. Lexi Potter was narrowly wide with a low shot from 20 yards in the second minute, then Roma goalkeeper Rachele Baldi parried an effort from Alyssa Thompson on to the crossbar, before saving from Lauren James.
After Roma defender Shukurat Oladipo produced a timely tackle to deny Aggie Beever-Jones a chance to double the lead, Kaptein shot over just before the half-hour mark, then James had a close-range shot blocked by Maya Antoine.
Bompastor brought on Carpenter and Sjoeke Nusken for Thompson and James at the interval – and the hosts were ahead soon after.
Carpenter made a powerful run and, after finding Kaptein, converted the resulting cross from the right with a low shot which took a deflection off defender Winonah Heatley and deceived Baldi.
Lucy Bronze took the captain's armband on her 35th birthday, as Keira Walsh and Melvine Malard replaced Erin Cuthbert and Beever-Jones.
Roma had to wait until the 66th minute for their first clear chance, with Maya Doms firing over, before Malard and Nusken had good chances to double Chelsea's advantage in quick succession – but their efforts were off-target.
The visitors' best opening came in the 78th minute but Alayah Pilgrim wasted it, firing over from a good position.
And the hosts made sure of the win when Buchanan headed home.
In other matches, Bayern Munich fought back from two goals down to draw 2-2 against Real Madrid and preserve their unbeaten home record at this stage of the competition.
And Servette Chenois claimed a historic maiden Champions League win at the ninth attempt as they brushed aside OH Leuven 5-1 in Geneva.