The disaster occurred when the boat's motor stopped working and the vessel began to take on water, Italian Interior Minister Angelino Alfano said. People on board burned a sheet to attract the attention of rescuers, starting a fire on board.
"Once the fire started, there was a concern about the boat sinking and everyone moved to one side, causing the boat to go down," he told a news conference.
The 20-metre (66 foot) vessel, believed to be carrying around 500 people, sank no more than 1 km (half a mile) from shore.
Bodies pulled from the water were laid out along the quayside as the death toll rose in what looked like one of the worst disasters to hit the perilous route for migrants seeking to reach Europe from Africa.
"It's horrific, like a cemetery, they are still bringing them out," Lampedusa Mayor Giusi Nicolini told reporters.
After 94 bodies were recovered from the surface, divers inspecting the wreck, sunk in 40 metres of water, saw dozens of bodies, bringing the total of known dead to well over 100 with more than 200 still unaccounted for, coast guard official Floriana Segreto said.
Alfano said three children and two pregnant women were among the victims.
The disaster happened four days after 13 migrants drowned off eastern Sicily. Italian President Giorgio Napolitano said action was needed by the European Union to stem "a succession of massacres of innocent people".
Last year, almost 500 people were reported dead or missing on the crossing from Tunisia to Italy, the U.N. refugee office UNHCR says. Syrians fleeing civil war have added to the numbers.
The crew of a fishing boat raised the alarm at around 7:20 a.m. (0520 GMT) and began pulling people out of the water before coastguard vessels arrived on the scene. The coastguard said 151 people had been rescued.
Between 450 and 500 people, most either Eritreans or Somalis, appeared to have been on board the boat, which had come from Misrata in Libya, Alfano said.
"If they had been able to use a telephone, they could have been saved," he said.
The search for survivors and victims continued within a four nautical mile radius, in water around 30-45 metres deep. Rescuers planned to widen the operation later in the day, in case bodies had been pulled away by the tides, he said.
Antonio Candela, director of rescue operations at the local health authority ASP Palermo, said many of those pulled out of the sea alive had been suffering from hypothermia and dehydration but were otherwise not seriously hurt.
U.N. High Commissioner for Refugees Antonio Guterres praised the rescue effort, but said: "I am dismayed at the rising global phenomenon of migrants and people fleeing conflict or persecution and perishing at sea."
African migrants frequently head for Lampedusa, just 113 km (70 miles) from the coast of Tunisia, and are often picked up at sea in dangerously overcrowded boats by the Italian coastguard.
The previous night 463 refugees from Syria were rescued, Candela told SkyTG24 television.
Pope Francis, who visited the island in July on his first papal trip outside Rome, said he felt "great pain" for the "many victims of the latest tragic shipwreck today off Lampedusa".
"The word that comes to mind is 'shame'," Francis said in unscripted remarks after a speech in the Vatican. "Let us unite our strengths so that such tragedies never happen again."
The stream of migrants is a humanitarian and political problem for the Italian government. About 15,000 reached Italy and Malta - 13,200 and 1,800 respectively - by sea last year, the UNHCR says. Thousands more have arrived this year.
Migrants who arrive in Italy are allowed to apply for asylum. Many are ordered to leave the country but slip away to become illegal immigrants in Italy or elsewhere in the European Union.
Italy has pressed the European Union for more help to fight the crisis, which it says concerns the whole bloc.
"This is not an Italian drama, this is a European drama," Alfano said. "Lampedusa has to be considered the frontier of Europe, not the frontier of Italy."