Prior to the game at the Stadio Giovanni Zini, Cremonese had drawn nine and lost 14 of their previous 23 games in the Italian top flight this season.
But Frank Tsadjout sent them on their way to a maiden victory with a 17th minute lead before Leonardo Spinazzola equalised with 19 minutes remaining.
However, Daniel Ciofani's penalty seven minutes from time proved to be the winner.
Roma manager Jose Mourinho was sent off just after half time following an altercation with fourth official Marco Serra.
It is the third time the former Chelsea, Real Madrid and Manchester United manager has been sent to the stands this season.
The win moved Cremonese off the foot of the Serie A table into 19th position but they are still eight points adrift of safety while Roma have dropped to fifth.
It is the second time Cremonese have gotten the better of Roma this season after also knocking them out of the Coppa Italia.