Stefan Savic begann im Alter von sieben Jahren beim Lieferinger SV im Salzburger Stadtteil Liefering mit dem Fußballspielen. 2005 wurde der FC Red Bull Salzburg auf ihn aufmerksam und holte ihn in sein Nachwuchsteam. Bei den Bullen spielte er für das BNZ-Team und debütierte mit 16 Jahren für die Zweite Mannschaft.
Nachdem Ricardo Moniz im April 2011 das Traineramt bei der Kampfmannschaft übernommen hatte, wurde dieser sofort auf Savic aufmerksam und ließ ihn mit der Ersten Mannschaft mittrainieren. Im Europa League Qualifikationsspiel gegen Liepājas Metalurgs saß er zum ersten Mal auf der Bank der Salzburger, ehe er am 21. August 2011 im Spiel gegen SK Sturm Graz sein Bundesliga-Debüt gab. Er stand in der Startformation und wurde zur Halbzeit durch Christoph Leitgeb ersetzt.
Zur Saison 2012/13 wurde er an den FC Liefering, das Farmteam von FC Red Bull Salzburg, verliehen. Mit den Lieferingern schaffte er den Aufstieg in Erste Liga und schlug kurz darauf eine Vertragsverlängerung aus, um in die Niederlande zum SC Heerenveen zu wechseln. Der sicher geglaubte Wechsel zerschlug sich jedoch, obwohl Savic die gesamte Vorbereitung bei Heerenveen bestritt. In der Folge scheiterte auch ein Engagement beim SC Cambuur. Grund dafür war die Ausbildungsentschädigung für Red Bull, die sich Cambuur nicht leisten wollte.[1] Nach einem halben Jahr ohne Verein kehrte er im Jänner 2014 zu Liefering zurück, wo er einen bis Juni 2015 laufenden Vertrag erhielt.[2]
Mit ihnen belegte er in der ersten Saison in der Ersten Liga den dritten Platz. Nach einem Jahr beim FC Liefering wechselte er in der Winterpause der Saison 2014/15 zum LASK.[3] In der Saison 2014/15 kam er insgesamt zu 34 Zweitligaeinsätzen, 20 Spiele absolvierte er für Liefering, 14 für den LASK.
Nach einem halben Jahr in Oberösterreich wechselte Savic zur Saison 2015/16 nach Kroatien zum NK Slaven Belupo.[4] In seinen eineinhalb Jahren bei Slaven Belupo kam er zu 55 Einsätzen in der 1. HNL, in denen er fünf Tore erzielte. Im Jänner 2017 wechselte er in die Niederlande zum Roda JC Kerkrade.[5]
Nachdem er in seinem halben Jahr in den Niederlanden zu keinem Einsatz in der Eredivisie gekommen war, wechselte er zur Saison 2017/18 nach Slowenien zum NK Olimpija Ljubljana.[6] In seiner ersten Saison in Slowenien konnte er mit Olimpija Ljubljana Meister werden. Nach drei Spielzeiten in Slowenien, in denen er zu 104 Einsätzen in der 1. SNL kam, verließ er Ljubljana nach der Saison 2019/20. Anschließend wechselte er nach Polen zu Wisła Krakau, wo er einen bis Juni 2022 laufenden Vertrag erhielt.[7] In zwei Spielzeiten kam er zu 52 Einsätzen in der Ekstraklasa. Mit Wisła stieg er am Ende der Saison 2021/22 aus der höchsten Spielklasse ab, woraufhin er Krakau mit seinem Vertragsende verließ.
Zur Saison 2022/23 wechselte Savic dann in die Türkei zum Zweitligisten Tuzlaspor. Für Tuzla kam er siebenmal in der TFF 1. Lig zum Einsatz, ehe er den Klub im Jänner 2023 wieder verließ. Anschließend wechselte er zurück nach Polen und schloss sich Warta Posen an.[8] Für Warta kam er insgesamt zu 44 Einsätzen in der Ekstraklasa, aus der er mit dem Klub 2024 aber abstieg.