Кастомизируете шаблон регистрации, спрячьте поле логин (только задайте ему какое-нить значение <input type="hidden" name="LOGIN" value="temp_login">), чтобы форма не ругалась. Напишите обработчик события onbeforeuserregister, где и делайте логин равный мейлу.
Что-то я ничего не понял, приведите пример вызова вашего баннера. ShowBanner не возвращает строку, так что str_replace тут не поможет. У метода ShowBanner есть параметры
В данном случае, вам ничего не мешает сформировать урль самому, идентификатор секции у вас есть, шаблон урля секции должен выбираться, вроде бы, CIBlock::GetList()
По идее, проблема то и не в <p>, т.к. таблица и ее ячейки это уже отдельные блоки. Проблема в margin у <p>, а вернее в значении margin у <p> по умолчанию в разных браузерах.