Почему блок не реагирует на размер инпута?
Смотрите, вы пишете:
я хочу, чтобы внутренний элемент занимал половину ширины блока, но сам блок по ширине равнялся внутреннему. 

Это бред. 

Нужно определиться кто от кого должен брать размеры. 
Инпут от родителя или родитель от инпута.

Если вы зададите размер инпуту в px, то родитель будет ровно как инпут (при ваших остальных стилях). 
Либо наоборот, разберитесь с шириной родителя, а инпуту задавайте 100%. 
Тогда они будут равны.
Чтобы задать отступ внутри input-а можно использовать padding-и