Отлично работает. Ищите ошибку в другом месте.
<div style="background-color: red">HELLO</div>
<script>
function opacity(element, speed){
setInterval(function(){
if(!element.style.opacity){
element.style.opacity = 0;
}
element.style.opacity = element.style.opacity + 0.08;
}, speed)
}
opacity(document.getElementsByTagName('div')[0], 1000);
</script>
Вероятно, после исполнения кода второй раз получается что-то типа opacity = '0.080.08'. Потому что style-свойства представлены строками, а не числами. В случае с минусом браузер старается преобразовать первый элемент в число, а во втором случае спокойно складывает две строки.