Bouhaddouz verhuisde als kind met zijn ouders van Marokko naar Duitsland. Daar speelde hij in de jeugd van FC Dietzenbach en SpVgg Neu-Isenburg, alvorens hij overstapte naar de opleiding van FSV Frankfurt. In januari 2009 huurde Erzgebirge Aue hem voor het restant van het seizoen.[1] In de seizoenen 2009/10 en 2010/11 speelde de Marokkaan voornamelijk als invaller mee bij het eerste elftal van Frankfurt. Hierna nam Wehen Wiesbaden hem over.[2] Na een jaar liet Bouhaddouz zijn contract ontbinden, waarop hij naar Viktoria Köln verkaste.[3] Opnieuw speelde de spits één seizoen bij zijn club, voor hij naar Bayer Leverkusen trok.[4] In Leverkusen speelde de Marokkaan slechts in het tweede elftal. Hier verdiende hij een overstap naar SV Sandhausen.[5] Na twee seizoenen en achttien treffers trok Bouhaddouz naar FC St. Pauli, waar hij zijn handtekening zette onder een verbintenis voor de duur van drie seizoenen.[6] In de zomer van 2018 verkaste de Marokkaan voor circa 750.000 euro naar Al-Batin, waar hij voor één jaar tekende met een optie op een seizoen extra.[7] In mei 2019 tekende Bouhaddouz een contract voor twee seizoenen bij zijn oude club SV Sandhausen, dat hem in de zomer transfervrij aan zou trekken.[8] Anderhalf jaar later verkaste hij naar MSV Duisburg.[9] Medio 2023 keerde Bouhaddouz terug bij FSV Frankfurt, waar hij zijn carrière begonnen was.[10] Eind 2023 besloot de aanvaller op zesendertigjarige leeftijd een punt te zetten achter zijn actieve loopbaan.[11]
Bouhaddouz maakte zijn debuut in het Marokkaans voetbalelftal op 31 augustus 2016, toen met 0–0 gelijkgespeeld werd tegen Albanië. De aanvaller mocht van bondscoach Hervé Renard in de basis beginnen en hij werd twaalf minuten voor tijd gewisseld voor Youssef Aït Bennasser. De andere debutanten dit duel waren Naif Aguerd (FUS Rabat), Youssef En-Nesyri (Málaga), Fayçal Rherras (Heart of Midlothian), Aït Bennasser (AS Nancy) en Ryan Mmaee (Standard Luik).[13] In zijn tweede interland, op 4 september 2016, kwam Bouhaddouz voor het eerst tot scoren. Sao Tomé en Principe werd met 2–0 verslagen. Hakim Ziyech opende vanuit een strafschop de score, waarna Bouhaddouz de voorsprong verdubbelde.[14] Bouhaddouz werd in mei 2018 door Renard opgenomen in de selectie van Marokko voor het wereldkampioenschap in Rusland.[15] In de openingswedstrijd van zijn vaderland op het eindtoernooi, op vrijdag 15 juni in Sint-Petersburg, kopte hij in de blessuretijd van het duel met Iran (0–1) de bal in eigen doel na een door Sofyan Amrabat veroorzaakte vrije trap.[16] Hierna werd met 1–0 verloren van Portugal en tegen Spanje werd met 2–2 gelijkgespeeld. Hierdoor werd Marokko in de groepsfase uitgeschakeld. Bouhaddouz mocht behalve tegen Iran ook tegen Spanje invallen.