You can do this, but then how will you validate your shaders against the used input layout? Unless you have another way to ensure that they match, then why not just create one at shader compilation time? Unless you create lots and lots of shader objects this shouldn't really pose a problem.
So you are proposing, that I should mimic Direct3D 10 API? Have a method like
CreateVertexLayout(VertexLayoutDescription, CompiledShader)? I was thinking about checking compatibility of VL and Shader in debug build using shader introspection or something like that.