Как это лучше сверстать?
Верно, tr игнорирует border стили, выставляй ячейкам, с коллапсом у таблицы:table {
  border-collapse: collapse;
}

th, td {
  border-bottom: ...;
}
А зачем такие сложности? ::before в помощь