É claro. Essa é uma técnica comum conhecida como superdigitação mesas. Como no seu exemplo, a ideia é que uma tabela contenha um superconjunto de entidades e tenha atributos comuns descrevendo uma entidade geral, e outras tabelas contenham subconjuntos dessas entidades com atributos específicos. Não é diferente de uma hierarquia de classes simples no design orientado a objetos.
Para sua segunda pergunta, uma tabela pode ter duas colunas que são chaves estrangeiras separadamente para a mesma outra tabela. Quando o banco de dados cria a consulta, ele une essa outra tabela duas vezes. Para ilustrar em uma consulta SQL (não tenho certeza sobre a sintaxe do MySQL, não a uso há muito tempo, então essa é a sintaxe do MS SQL especificamente), você daria a essa tabela dois aliases distintos ao selecionar dados. Algo assim:
SELECT
student_accounts.name AS student_name,
counselor_accounts.name AS counselor_name
FROM
student_rec
INNER JOIN user_accounts AS student_accounts
ON student_rec.student_number = student_accounts.user_id
INNER JOIN user_accounts AS counselor_accounts
ON student_rec.guidance_counselor_id = counselor_accounts.user_id
Isso basicamente leva o
student_rec
tabela e a combina com as user_accounts
table duas vezes, uma vez em cada coluna, e atribui dois apelidos diferentes ao combiná-los para diferenciá-los.