One reason Virgil doesn't call Ulysses, the Latin version of the Greek name Odysseus, a hero is because Ulysses is the Greek king of Ithaca, part of the Danaan people and part of the armies that attacked and conquered Troy during the Trojan War. Homer tell the Greek/Danaan side of the story in The Iliad and The Odyssey, in which Odysseus is a great hero and champion, while Virgil tells the Trojan side of it in Aeneid, which casts Ulysses (Odysseus) as an attacking villain.
While Ulysses was part of the Greek nation, Aeneas was a Trojan and promised by Jupiter a new land where he would originate a great people who would rule the world in peace and prosperity. This promised people originating with Aeneas was the Roman state. The Romans and the Greeks were the two great civilizations and, at the time of which Virgil writes, great enemies. Defeated armies don't typically identify the conquering forces as being heroes, and Virgil certainly does not do so when it comes to Ulysses.