Se o que retorna da mysqli_query ja é um array, por que não posso resumir fazendo retornar o $resultado?
function listaProdutos($conexao) {
    $produtos = array();
    $resultado = mysqli_query($conexao, "select p.*,c.nome as categoria_nome from 
            produtos as p join categorias as c on c.id=p.categoria_id");
    while($produto_array = mysqli_fetch_assoc($resultado)) {
        array_push($produtos, $produto);
    }
    return $produtos;
}
Poderia fazer isso ? ou por algum motivo seria uma má pratica?
function listaProdutos($conexao) {
    $resultado = mysqli_query($conexao, "select p.*,c.nome as categoria_nome from 
            produtos as p join categorias as c on c.id=p.categoria_id");
    return $resultado;
}